]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/35972 (load-PRE missed opportunities without SFTs)
authorRichard Guenther <rguenther@suse.de>
Tue, 19 Aug 2008 09:06:54 +0000 (09:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 19 Aug 2008 09:06:54 +0000 (09:06 +0000)
2008-08-19  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/35972
PR tree-optimization/23094
* tree-ssa-sccvn.h (vn_reference_lookup_pieces): Add maywalk
parameter.
* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Properly
handle MISALIGNED_INDIRECT_REF.
(get_ref_from_reference_ops): New helper.
(vn_reference_lookup_pieces): Walk the use-def chain using the
alias-oracle if requested.
* tree-ssa-pre.c (phi_translate_1): Do reference lookup with
walking the use-def chain.
(compute_avail): But not here.
(create_component_ref_by_pieces_1): Properly handle
MISALIGNED_INDIRECT_REF.
(do_regular_insertion): Handle fully redundant
expressions after PHI-translation also for SSA_NAME values, not
only constants.  Correctly use edoubleprime for that.

* gcc.dg/tree-ssa/ssa-pre-19.c: New testcase.
* gcc.dg/autopar/reduc-1.c: Move constant initialized arrays to
global memory.
* gcc.dg/autopar/reduc-1char.c: Likewise.
* gcc.dg/autopar/reduc-1short.c: Likewise.
* gcc.dg/autopar/reduc-2.c: Likewise.
* gcc.dg/autopar/reduc-2char.c: Likewise.
* gcc.dg/autopar/reduc-2short.c: Likewise.
* gcc.dg/autopar/reduc-3.c: Likewise.
* gcc.dg/tree-ssa/ifc-20040816-1.c: Likewise.
* gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c: Likewise.
* gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c: Likewise.
* gcc.dg/vect/fast-math-vect-reduc-5.c: Likewise.
* gcc.dg/vect/fast-math-vect-reduc-7.c: Likewise.
* gcc.dg/vect/no-trapping-math-2.c: Likewise.
* gcc.dg/vect/no-trapping-math-vect-111.c: Likewise.
* gcc.dg/vect/no-trapping-math-vect-ifcvt-11.c: Likewise.
* gcc.dg/vect/no-trapping-math-vect-ifcvt-12.c: Likewise.
* gcc.dg/vect/no-trapping-math-vect-ifcvt-13.c: Likewise.
* gcc.dg/vect/no-trapping-math-vect-ifcvt-14.c: Likewise.
* gcc.dg/vect/no-trapping-math-vect-ifcvt-15.c: Likewise.
* gcc.dg/vect/no-vfa-vect-37.c: Likewise.
* gcc.dg/vect/no-vfa-vect-depend-1.c: Likewise.
* gcc.dg/vect/pr18400.c: Likewise.
* gcc.dg/vect/slp-12b.c: Likewise.
* gcc.dg/vect/slp-14.c: Likewise.
* gcc.dg/vect/slp-7.c: Likewise.
* gcc.dg/vect/slp-15.c: Likewise.
* gcc.dg/vect/slp-16.c: Likewise.
* gcc.dg/vect/slp-17.c: Likewise.
* gcc.dg/vect/slp-24.c: Likewise.
* gcc.dg/vect/slp-28.c: Likewise.
* gcc.dg/vect/slp-3.c: Likewise.
* gcc.dg/vect/slp-34.c: Likewise.
* gcc.dg/vect/slp-6.c: Likewise.
* gcc.dg/vect/slp-8.c: Likewise.
* gcc.dg/vect/vect-107.c: Likewise.
* gcc.dg/vect/vect-108.c: Likewise.
* gcc.dg/vect/vect-11.c: Likewise.
* gcc.dg/vect/vect-112.c: Likewise.
* gcc.dg/vect/vect-115.c: Likewise.
* gcc.dg/vect/vect-11a.c: Likewise.
* gcc.dg/vect/vect-34.c: Likewise.
* gcc.dg/vect/vect-9.c: Likewise.
* gcc.dg/vect/vect-97.c: Likewise.
* gcc.dg/vect/vect-align-1.c: Likewise.
* gcc.dg/vect/vect-float-extend-1.c: Likewise.
* gcc.dg/vect/vect-floatint-conversion-1.c: Likewise.
* gcc.dg/vect/vect-ifcvt-16.c: Likewise.
* gcc.dg/vect/vect-ifcvt-17.c: Likewise.
* gcc.dg/vect/vect-ifcvt-2.c: Likewise.
* gcc.dg/vect/vect-ifcvt-3.c: Likewise.
* gcc.dg/vect/vect-ifcvt-4.c: Likewise.
* gcc.dg/vect/vect-ifcvt-5.c: Likewise.
* gcc.dg/vect/vect-ifcvt-6.c: Likewise.
* gcc.dg/vect/vect-ifcvt-7.c: Likewise.
* gcc.dg/vect/vect-intfloat-conversion-1.c: Likewise.
* gcc.dg/vect/vect-intfloat-conversion-2.c: Likewise.
* gcc.dg/vect/vect-intfloat-conversion-3.c: Likewise.
* gcc.dg/vect/vect-intfloat-conversion-4a.c: Likewise.
* gcc.dg/vect/vect-intfloat-conversion-4b.c: Likewise.
* gcc.dg/vect/vect-multitypes-2.c: Likewise.
* gcc.dg/vect/vect-multitypes-5.c: Likewise.
* gcc.dg/vect/vect-reduc-1.c: Likewise.
* gcc.dg/vect/vect-reduc-1char.c: Likewise.
* gcc.dg/vect/vect-reduc-1short.c: Likewise.
* gcc.dg/vect/vect-reduc-2.c: Likewise.
* gcc.dg/vect/vect-reduc-3.c: Likewise.
* gcc.dg/vect/vect-shift-1.c: Likewise.
* gcc.dg/vect/vect-strided-float.c: Likewise.
* gcc.dg/vect/vect-strided-store-u32-i2.c: Likewise.
* gcc.dg/vect/wrapv-vect-reduc-2char.c: Likewise.
* gcc.dg/vect/wrapv-vect-reduc-2short.c: Likewise.
* gcc.dg/tree-ssa/gen-vect-11.c: Likewise.
* gcc.dg/tree-ssa/gen-vect-11a.c: Likewise.
* gcc.dg/tree-ssa/gen-vect-2.c: Likewise.
* gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c: Likewise.

From-SVN: r139226

81 files changed:
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/autopar/reduc-1.c
gcc/testsuite/gcc.dg/autopar/reduc-1char.c
gcc/testsuite/gcc.dg/autopar/reduc-1short.c
gcc/testsuite/gcc.dg/autopar/reduc-2.c
gcc/testsuite/gcc.dg/autopar/reduc-2char.c
gcc/testsuite/gcc.dg/autopar/reduc-2short.c
gcc/testsuite/gcc.dg/autopar/reduc-3.c
gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c
gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c
gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
gcc/testsuite/gcc.dg/tree-ssa/ifc-20040816-1.c
gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c
gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c
gcc/testsuite/gcc.dg/vect/fast-math-vect-reduc-5.c
gcc/testsuite/gcc.dg/vect/fast-math-vect-reduc-7.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-2.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-vect-111.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-vect-ifcvt-11.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-vect-ifcvt-12.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-vect-ifcvt-13.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-vect-ifcvt-14.c
gcc/testsuite/gcc.dg/vect/no-trapping-math-vect-ifcvt-15.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-37.c
gcc/testsuite/gcc.dg/vect/no-vfa-vect-depend-1.c
gcc/testsuite/gcc.dg/vect/pr18400.c
gcc/testsuite/gcc.dg/vect/slp-12b.c
gcc/testsuite/gcc.dg/vect/slp-14.c
gcc/testsuite/gcc.dg/vect/slp-15.c
gcc/testsuite/gcc.dg/vect/slp-16.c
gcc/testsuite/gcc.dg/vect/slp-17.c
gcc/testsuite/gcc.dg/vect/slp-24.c
gcc/testsuite/gcc.dg/vect/slp-28.c
gcc/testsuite/gcc.dg/vect/slp-3.c
gcc/testsuite/gcc.dg/vect/slp-34.c
gcc/testsuite/gcc.dg/vect/slp-6.c
gcc/testsuite/gcc.dg/vect/slp-7.c
gcc/testsuite/gcc.dg/vect/slp-8.c
gcc/testsuite/gcc.dg/vect/vect-107.c
gcc/testsuite/gcc.dg/vect/vect-108.c
gcc/testsuite/gcc.dg/vect/vect-11.c
gcc/testsuite/gcc.dg/vect/vect-112.c
gcc/testsuite/gcc.dg/vect/vect-115.c
gcc/testsuite/gcc.dg/vect/vect-11a.c
gcc/testsuite/gcc.dg/vect/vect-34.c
gcc/testsuite/gcc.dg/vect/vect-9.c
gcc/testsuite/gcc.dg/vect/vect-97.c
gcc/testsuite/gcc.dg/vect/vect-align-1.c
gcc/testsuite/gcc.dg/vect/vect-float-extend-1.c
gcc/testsuite/gcc.dg/vect/vect-floatint-conversion-1.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-16.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-17.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-2.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-3.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-4.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-5.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-6.c
gcc/testsuite/gcc.dg/vect/vect-ifcvt-7.c
gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-1.c
gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-2.c
gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-3.c
gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-4a.c
gcc/testsuite/gcc.dg/vect/vect-intfloat-conversion-4b.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-2.c
gcc/testsuite/gcc.dg/vect/vect-multitypes-5.c
gcc/testsuite/gcc.dg/vect/vect-reduc-1.c
gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c
gcc/testsuite/gcc.dg/vect/vect-reduc-1short.c
gcc/testsuite/gcc.dg/vect/vect-reduc-2.c
gcc/testsuite/gcc.dg/vect/vect-reduc-3.c
gcc/testsuite/gcc.dg/vect/vect-shift-1.c
gcc/testsuite/gcc.dg/vect/vect-strided-float.c
gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c
gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2char.c
gcc/testsuite/gcc.dg/vect/wrapv-vect-reduc-2short.c
gcc/tree-ssa-pre.c
gcc/tree-ssa-sccvn.c
gcc/tree-ssa-sccvn.h

index 0055802806f01f751a97db0e309ffa552fca1212..68e7be66686cd109939394832e190e89456bcdb0 100644 (file)
@@ -1,3 +1,23 @@
+2008-08-19  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/35972
+       PR tree-optimization/23094
+       * tree-ssa-sccvn.h (vn_reference_lookup_pieces): Add maywalk
+       parameter.
+       * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Properly
+       handle MISALIGNED_INDIRECT_REF.
+       (get_ref_from_reference_ops): New helper.
+       (vn_reference_lookup_pieces): Walk the use-def chain using the
+       alias-oracle if requested.
+       * tree-ssa-pre.c (phi_translate_1): Do reference lookup with
+       walking the use-def chain.
+       (compute_avail): But not here.
+       (create_component_ref_by_pieces_1): Properly handle
+       MISALIGNED_INDIRECT_REF.
+       (do_regular_insertion): Handle fully redundant
+       expressions after PHI-translation also for SSA_NAME values, not
+       only constants.  Correctly use edoubleprime for that.
+
 2008-08-19  Ira Rosen  <irar@il.ibm.com>
 
        * tree-vectorizer.c (supportable_widening_operation): Support
index ef27c4b069e60606738bbcc51e8d72726ae178a0..e51e9a6012f24b85681443fc0cfa7d15c63ae3f7 100644 (file)
@@ -1,3 +1,85 @@
+2008-08-19  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/35972
+       PR tree-optimization/23094
+       * gcc.dg/tree-ssa/ssa-pre-19.c: New testcase.
+       * gcc.dg/autopar/reduc-1.c: Move constant initialized arrays to
+       global memory.
+       * gcc.dg/autopar/reduc-1char.c: Likewise.
+       * gcc.dg/autopar/reduc-1short.c: Likewise.
+       * gcc.dg/autopar/reduc-2.c: Likewise.
+       * gcc.dg/autopar/reduc-2char.c: Likewise.
+       * gcc.dg/autopar/reduc-2short.c: Likewise.
+       * gcc.dg/autopar/reduc-3.c: Likewise.
+       * gcc.dg/tree-ssa/ifc-20040816-1.c: Likewise.
+       * gcc.dg/vect/costmodel/i386/costmodel-vect-reduc-1char.c: Likewise.
+       * gcc.dg/vect/costmodel/x86_64/costmodel-vect-reduc-1char.c: Likewise.
+       * gcc.dg/vect/fast-math-vect-reduc-5.c: Likewise.
+       * gcc.dg/vect/fast-math-vect-reduc-7.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-2.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-vect-111.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-vect-ifcvt-11.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-vect-ifcvt-12.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-vect-ifcvt-13.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-vect-ifcvt-14.c: Likewise.
+       * gcc.dg/vect/no-trapping-math-vect-ifcvt-15.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-37.c: Likewise.
+       * gcc.dg/vect/no-vfa-vect-depend-1.c: Likewise.
+       * gcc.dg/vect/pr18400.c: Likewise.
+       * gcc.dg/vect/slp-12b.c: Likewise.
+       * gcc.dg/vect/slp-14.c: Likewise.
+       * gcc.dg/vect/slp-7.c: Likewise.
+       * gcc.dg/vect/slp-15.c: Likewise.
+       * gcc.dg/vect/slp-16.c: Likewise.
+       * gcc.dg/vect/slp-17.c: Likewise.
+       * gcc.dg/vect/slp-24.c: Likewise.
+       * gcc.dg/vect/slp-28.c: Likewise.
+       * gcc.dg/vect/slp-3.c: Likewise.
+       * gcc.dg/vect/slp-34.c: Likewise.
+       * gcc.dg/vect/slp-6.c: Likewise.
+       * gcc.dg/vect/slp-8.c: Likewise.
+       * gcc.dg/vect/vect-107.c: Likewise.
+       * gcc.dg/vect/vect-108.c: Likewise.
+       * gcc.dg/vect/vect-11.c: Likewise.
+       * gcc.dg/vect/vect-112.c: Likewise.
+       * gcc.dg/vect/vect-115.c: Likewise.
+       * gcc.dg/vect/vect-11a.c: Likewise.
+       * gcc.dg/vect/vect-34.c: Likewise.
+       * gcc.dg/vect/vect-9.c: Likewise.
+       * gcc.dg/vect/vect-97.c: Likewise.
+       * gcc.dg/vect/vect-align-1.c: Likewise.
+       * gcc.dg/vect/vect-float-extend-1.c: Likewise.
+       * gcc.dg/vect/vect-floatint-conversion-1.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-16.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-17.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-2.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-3.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-4.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-5.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-6.c: Likewise.
+       * gcc.dg/vect/vect-ifcvt-7.c: Likewise.
+       * gcc.dg/vect/vect-intfloat-conversion-1.c: Likewise.
+       * gcc.dg/vect/vect-intfloat-conversion-2.c: Likewise.
+       * gcc.dg/vect/vect-intfloat-conversion-3.c: Likewise.
+       * gcc.dg/vect/vect-intfloat-conversion-4a.c: Likewise.
+       * gcc.dg/vect/vect-intfloat-conversion-4b.c: Likewise.
+       * gcc.dg/vect/vect-multitypes-2.c: Likewise.
+       * gcc.dg/vect/vect-multitypes-5.c: Likewise.
+       * gcc.dg/vect/vect-reduc-1.c: Likewise.
+       * gcc.dg/vect/vect-reduc-1char.c: Likewise.
+       * gcc.dg/vect/vect-reduc-1short.c: Likewise.
+       * gcc.dg/vect/vect-reduc-2.c: Likewise.
+       * gcc.dg/vect/vect-reduc-3.c: Likewise.
+       * gcc.dg/vect/vect-shift-1.c: Likewise.
+       * gcc.dg/vect/vect-strided-float.c: Likewise.
+       * gcc.dg/vect/vect-strided-store-u32-i2.c: Likewise.
+       * gcc.dg/vect/wrapv-vect-reduc-2char.c: Likewise.
+       * gcc.dg/vect/wrapv-vect-reduc-2short.c: Likewise.
+       * gcc.dg/tree-ssa/gen-vect-11.c: Likewise.
+       * gcc.dg/tree-ssa/gen-vect-11a.c: Likewise.
+       * gcc.dg/tree-ssa/gen-vect-2.c: Likewise.
+       * gcc.dg/vect/costmodel/ppc/costmodel-vect-76c.c: Likewise.
+
 2008-08-19  Ira Rosen  <irar@il.ibm.com>
 
        * gcc.dg/vect/slp-multitypes-1.c: New testcase.
index c7f53e1e50d3b09a3a15de78c353830b89e1bec1..ac08d3d2e47f57d78955135b92c0733384b336e4 100644 (file)
@@ -7,13 +7,14 @@
 #define N 16
 #define DIFF 242
 
+unsigned int ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned int uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 /* Reduction of unsigned-int.  */
 
 void main1 (unsigned int x, unsigned int max_result, unsigned int min_result)
 {
   int i;
-  unsigned int ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned int uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned int udiff = 2;
   unsigned int umax = x;
   unsigned int umin = x;
index 87f758a4e462370acd759bf0b6007e39e4776767..228e97995a730f9d68379bcbb16375314b6645aa 100644 (file)
@@ -7,12 +7,13 @@
 #define N 16
 #define DIFF 242
 
+unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline)) void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
 {
   int i;
-  unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned char udiff = 2;
   unsigned char umax = x;
   unsigned char umin = x;
index 75d09544f8c5696ee2aaf4666a3ebd3a6be5ff6a..45d96fdc9265ce3a9ea9add85b81b9d15239bfe4 100644 (file)
@@ -7,13 +7,14 @@
 #define N 16
 #define DIFF 242
 
+unsigned short ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned short uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline)) void
 main1 (unsigned short x, unsigned short max_result, unsigned short min_result)
 {
   int i;
-  unsigned short ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned short uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
-  unsigned short  udiff = 2;
+  unsigned short udiff = 2;
   unsigned short umax = x;
   unsigned short umin = x;
 
index d462f894f2eac2ca46a5ccd1bd7a8f002ba7ea23..684094d6319b93354b72d103a86d2df097107989 100644 (file)
@@ -7,14 +7,15 @@
 #define N 16
 #define DIFF 240
 
+int b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 /* Reduction of signed-int.  */
 
 __attribute__ ((noinline))
 void main1 (int x, int max_result, int min_result)
 {
   int i;
-  int b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  int c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   int diff = 0;
   int max = x;
   int min = x;
index 15acb3bcc9a52fe8e7b76c8088a5ff3be4131247..78e5b13aca2330f6b8f7dab85e1b1a8f0c2a176f 100644 (file)
@@ -7,12 +7,13 @@
 #define N 16
 #define DIFF 121
 
+signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
+signed char c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline))
 void main1 (signed char x, signed char max_result, signed char min_result)
 {
   int i;
-  signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
-  signed char c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   signed char diff = 2;
   signed char max = x;
   signed char min = x;
index f98402ee251e5e36dfe0884a023f1ddad0a62b4d..cef179b7f532275298a81e834732fdc2593dab1e 100644 (file)
@@ -7,12 +7,13 @@
 #define N 16
 #define DIFF 242
 
+short b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+short c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline))
 void main1 (short x, short max_result, short min_result)
 {
   int i;
-  short b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  short c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   short diff = 2;
   short max = x;
   short min = x;
index 31ed2bc11c254e79cb4496fb36baf9efc27f3014..97501c6158478c160c67738aed7d22864d13c52b 100644 (file)
@@ -6,14 +6,15 @@
 
 #define N 16
 
+unsigned int ub[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned int uc[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 /* Reduction of unsigned-int.  */
 
 __attribute__ ((noinline))
 int main1 (int n, int res)
 {
   int i;
-  unsigned int ub[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned int uc[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned int udiff;
 
   udiff = 0;
index c0d6b20f0c8329c7240797cc27f5b3e455dfa515..7fdcf75067530eadec49d5bd6e9e06083a1f0b02 100644 (file)
@@ -6,12 +6,13 @@
 
 #define N 16
 
+char ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+char ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 int main ()
 {
   int i;
   char ia[N];
-  char ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  char ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   for (i = 0; i < N; i++)
     {
index b0394c6519aefbaa764682161cff42759c8374bd..d147b81158bb67e2dde884fa1e11d5ad4f954f46 100644 (file)
@@ -14,12 +14,13 @@ typedef short half_word;
 typedef int half_word;
 #endif
 
+half_word ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+half_word ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 int main ()
 {
   int i;
   half_word ia[N];
-  half_word ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  half_word ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   for (i = 0; i < N; i++)
     {
index 5c4e9735bbdbe69ec7eb9b3b195563d405811111..84248ee87fd45658a207a2ed497e99152e0b105c 100644 (file)
@@ -14,9 +14,10 @@ typedef short half_word;
 typedef int half_word;
 #endif
 
+half_word cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 int main ()
 {
-  half_word cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
   half_word ca[N];
   int i;
 
index 691026d7905367eb75ae3313eb5c21387ad6f7c4..e7b13b540965ab2578f956a55b9ae3bf413277e2 100644 (file)
@@ -6,12 +6,12 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+
 extern void abort(void); 
 
 int main1 ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-
   int i, j;
 
   for (i = 0; i < N; i++)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c
new file mode 100644 (file)
index 0000000..0fd0dc5
--- /dev/null
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+
+struct Loc {
+    int x[3];
+};
+
+void bar (struct Loc *);
+
+int foo (int i, int j, int k, int b)
+{
+  struct Loc IND;
+  int res;
+
+  if (b)
+    {
+      IND.x[0] = i;
+      IND.x[1] = j;
+      IND.x[2] = k-1;
+    }
+  else
+    {
+      IND.x[0] = i;
+      IND.x[1] = j;
+      IND.x[2] = k;
+    }
+
+  /* This should be optimized to i + j + {k, k + 1}.  */
+  res = IND.x[0] + IND.x[1] + IND.x[2];
+
+  /* This is just to prevent SRA.  */
+  bar (&IND);
+
+  return res;
+}
+
+/* All three loads should be eliminated.  */
+/* { dg-final { scan-tree-dump "Eliminated: 3" "pre" } } */
+/* { dg-final { cleanup-tree-dump "pre" } } */
index 55334fdd20df312449cc8e885542abcb3cfb840a..a7b86cebd9c9c4a94274e972bedde74869ee6eb8 100644 (file)
@@ -6,12 +6,13 @@
 #define N 16
 #define DIFF 242
 
+unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
 {
   int i;
-  unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned char udiff = 2;
   unsigned char umax = x;
   unsigned char umin = x;
index d18f416a07c1839ed0e37dfb002af91b8d72c33d..1142e7a2717d863e01ac2668915c5ac44461dae5 100644 (file)
    more involved than just an ssa_name.  */
 
 int ib[N+OFF] __attribute__ ((__aligned__(16))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10};
+int ic[N+OFF] = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10};
 
 int main1 (int *pib)
 {
   int i;
   int ia[N+OFF];
-  int ic[N+OFF] = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10};
 
   for (i = OFF; i < N; i++)
     {
index 55334fdd20df312449cc8e885542abcb3cfb840a..a7b86cebd9c9c4a94274e972bedde74869ee6eb8 100644 (file)
@@ -6,12 +6,13 @@
 #define N 16
 #define DIFF 242
 
+unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
 {
   int i;
-  unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned char udiff = 2;
   unsigned char umax = x;
   unsigned char umin = x;
index 74bdd262319adcbfed7ce584237d6bcadb57a65f..377d74b77794ff7be5011cd150bbb5cdc8216ff4 100644 (file)
@@ -9,11 +9,12 @@
 #define N 16
 #define DIFF 242
 
+float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 int main1 (float x, float max_result)
 {
   int i;
-  float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   float diff = 2;
   float max = x;
   float min = 10;
index b25e1145b1e8e356b29fa66ea5a687a21225931f..9f36db2e70120a4793ece801062b29ca94ed67bf 100644 (file)
@@ -9,11 +9,12 @@
 #define N 16
 #define DIFF 242
 
+double b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+double c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 int main1 (double x, double max_result)
 {
   int i;
-  double b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  double c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   double diff = 2;
   double max = x;
   double min = 10;
index cc3142efd68e3413bdc1065703c594b6fac8e31b..3971c920afa748d4ef62edb7b09fb85747c2271b 100644 (file)
@@ -6,12 +6,13 @@
 
 #define N 16
 
+float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
   float a[N];
-  float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   /* Condition in loop.  */
   /* This loop is vectorized on platforms that support vect_condition.  */
index 413c7ef42267d84b137bef802fdc565569bcf403..673346a675c75b56da1ce2d4cd7499c9d8667746 100644 (file)
@@ -5,12 +5,13 @@
 
 #define N 16
 
+float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
   float a[N];
-  float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   /* Condition in loop.  */
   /* This loop is vectorized on platforms that support vect_condition.  */
index 560b5bc73df5f4f093f99d435c165b088d304925..a35b7ade8e6a9be8d68a426bd77719fc842ebbc8 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+float B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
+
 extern void abort(void); 
 
 int main ()
 {  
-  float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  float B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
   int i, j;
 
   check_vect ();
index 5f132b8ba81ac175353305ebb9837d163ec5a27c..485e88cf38323039d7f1729d76a0ff7668593c9c 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+float B[N] = {0,0,0,42,42,0,0,0,0,0,42,42,42,42,42,0};
+
 extern void abort(void); 
 
 int main ()
 {  
-  float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  float B[N] = {0,0,0,42,42,0,0,0,0,0,42,42,42,42,42,0};
   int i, j;
 
   check_vect ();
index a5a59366bdce0376e768138179648603f1b7c1b1..58e6dc0a9ca674732a25a89669455248c5c56578 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
   int i, j;
 
   check_vect ();
index a5a59366bdce0376e768138179648603f1b7c1b1..58e6dc0a9ca674732a25a89669455248c5c56578 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  float B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
   int i, j;
 
   check_vect ();
index 67d7ebe60c68d2f883e1bc0aee0010504b534d55..a15a0b1278cfcbd46e02877cd0dd9b59f3307ff2 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+float B[N] = {42,42,0,0,0,42,42,42,42,42,0,0,0,0,0,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  float B[N] = {42,42,0,0,0,42,42,42,42,42,0,0,0,0,0,42};
   int i, j;
 
   check_vect ();
index 09df31f7c3b9d4f42e7b401ff472b6815b0a073d..bfa0802c0ced0e87a67fae491ea0b6b847b5d0bc 100644 (file)
@@ -5,6 +5,7 @@
 
 #define N 16
 char x[N] __attribute__ ((__aligned__(16)));
+char cb[N] __attribute__ ((__aligned__(16))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
  
 __attribute__ ((noinline))
 int main1 (char *y)
@@ -13,7 +14,6 @@ int main1 (char *y)
     char *p;
     char *q;
   } s;
-  char cb[N] __attribute__ ((__aligned__(16))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
   int i;
 
   /* Not vectorized - can't antialias the pointer s.p from the array cb.  */
index 2c3ac296ff879a64bb7f5ae68985ac53618c0531..329478d39fe2b5adf1ee79190d555de39575a7bc 100644 (file)
@@ -5,13 +5,14 @@
 
 #define N 17
 
+int ia[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
+int res[N] = {12,24,36,48,60,72,84,96,108,120,132,144,156,168,180,192,48};
+
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
-  int ia[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
-  int res[N] = {12,24,36,48,60,72,84,96,108,120,132,144,156,168,180,192,48};
 
   /* Not vectorizable due to data dependence: dependence distance 1.  */ 
   for (i = 0; i < N - 1; i++)
index e2ad18cec7dda410693ab3cd2575f9942df5a2f0..6bc3b5c831b35990a95ded35b785eb93bdbc6ca0 100644 (file)
@@ -4,11 +4,12 @@
 #include "tree-vect.h"
 
 #define N 8
+
+int b[N] = {0,3,6,9,12,15,18,21};
+int a[N];
  
 int main1 ()
 {  
-  int b[N] = {0,3,6,9,12,15,18,21};
-  int a[N];
   int i;
 
   for (i = 0; i < N; i++)
index 7b65dfcfe35e1b099e46a860ec06f29559742660..9f7c7606b46e708932e6a82658edc9ceb066f388 100644 (file)
@@ -6,11 +6,12 @@
 
 #define N 64 
 
+unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+
 int
 main1 ()
 {
   int i;
-  unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
   float out2[N*8], fa[N*4];
 
   for (i = 0; i < N; i++)
index 2051e285f64a341ba6645ecf55ccf80c96d8e725..98a203cf5ca6d6a90f14e39c650780046aee2ab1 100644 (file)
@@ -6,13 +6,14 @@
 
 #define N 8 
 
+unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned short in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+
 int
 main1 (int n)
 {
   int i;
   unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
-  unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned short in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
   unsigned short out2[N*16];
 
   /* Multiple types are now SLPable.  */
index 08b6f84b2092eda1918d96019334e779c652d16f..dde0b746fae0094e8470311e8701fb9d34f17a2e 100644 (file)
@@ -6,14 +6,16 @@
 
 #define N 8 
 
+unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
+unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned int in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned int out2[N*16];
+
 int
 main1 (int n)
 {
   int i;
-  unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
-  unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned int in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned int out2[N*16];
+  unsigned int a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
 
   for (i = 0; i < n; i++)
     {
index cbc47cd1f2be1efedcfd33a2ccc076b28fc42ed6..5ca698f7d36fb2b88cf8fd2e5c6d0977509bf9cd 100644 (file)
@@ -6,14 +6,16 @@
 
 #define N 8 
 
+unsigned int out[N*8];
+unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned int in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned int out2[N*16];
+
 int
 main1 ()
 {
   int i;
-  unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
-  unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned int in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned int out2[N*16];
+  unsigned int a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
 
   /* SLP group of size that is not a multiple of vector size. 
      Unrolling by 2.  */
index 0a760bf2c686da36214a1c1930294a9c4986a21c..0939f74d4db68a465a256f12163a7b71a16928be 100644 (file)
@@ -6,14 +6,15 @@
 
 #define N 8 
 
+unsigned short out[N*8];
+unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned short in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned short out2[N*8];
+
 int
 main1 ()
 {
   int i;
-  unsigned short out[N*8];
-  unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned short in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned short out2[N*8];
 
   for (i = 0; i < N*2; i++)
     {
index b3bf0735b028609cb700b2f8c45269621f95c623..bd9c7515e44c1e776f9a96013e4c9458f23e160c 100644 (file)
@@ -14,12 +14,13 @@ typedef struct {
    unsigned char d;
 } s;
 
+unsigned char ub[N*2] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *arr)
 {
   int i;
-  unsigned char ub[N*2] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned char udiff = 2;
   unsigned char umax = x;
   unsigned char umin = x;
index 069116ac58ec96f0f677c254167f973db4b9c2e9..780a4472b816073ec27da11dbe56a0e87ce45d33 100644 (file)
@@ -6,15 +6,16 @@
 
 #define N 32 
 
+unsigned short in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+unsigned short in2[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+unsigned short in3[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+unsigned short check[N] = {0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,20,21,22,23,25,26,27,28,30,31,32,33,35,36,37,38};
+unsigned short check3[N] = {0,1,2,3,4,5,6,7,8,9,10,11,5,6,7,8,9,10,11,12,13,14,15,16,10,11,12,13,14,15,16,17};
+
 int
 main1 ()
 {
   int i;
-  unsigned short in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
-  unsigned short in2[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
-  unsigned short in3[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
-  unsigned short check[N] = {0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,20,21,22,23,25,26,27,28,30,31,32,33,35,36,37,38};
-  unsigned short check3[N] = {0,1,2,3,4,5,6,7,8,9,10,11,5,6,7,8,9,10,11,12,13,14,15,16,10,11,12,13,14,15,16,17};
 
   for (i = 0; i < N/4; i++)
     {
index cf39bf17a31a60426bec92b5e7c0c52c35b2a7d5..070715371bb74d01551e9aebc09eb87bab982ca0 100644 (file)
@@ -6,12 +6,13 @@
 
 #define N 8 
 
+unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+
 int
 main1 ()
 {
   int i;
   unsigned short out[N*8];
-  unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
 
   for (i = 0; i < N; i++)
     {
index d25eef0210114829969f39072e986766fced3afd..3ed56eae4ec6e871163b153d2c833fb09dfe0e5b 100644 (file)
@@ -6,13 +6,14 @@
 
 #define N 8 
 
+unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned short in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+
 int
 main1 ()
 {
   int i;
   unsigned short out[N*8];
-  unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned short in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
   unsigned short out2[N*8];
 
   /* SLP with unrolling by 8.  */
index 5e86410588a94aebfc5b782aefcd7622e8759335..672b1d6e28abac387396dd15b627f70c65a54dad 100644 (file)
@@ -6,13 +6,14 @@
 
 #define N 8 
 
+unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned int in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+
 int
 main1 ()
 {
   int i;
   unsigned short out[N*8];
-  unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned int in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
   unsigned int out2[N*8];
 
   for (i = 0; i < N; i++)
index f000fc9059fb452c4d5d901f7059ae6238e6a95c..72ec0cd1ea2052d43967ff01dec43271919ad88d 100644 (file)
@@ -6,13 +6,14 @@
 
 #define N 8 
 
+unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned short in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+
 int
 main1 ()
 {
   int i;
   unsigned int out[N*8], ia[N*2];
-  unsigned int in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned short in2[N*16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
   unsigned short sa[N], out2[N*16];
 
   for (i = 0; i < N; i++)
index 1260ddce5046aaab7fa3e7cf4281e84271861110..76db4e1c28ac30e4fa2e081ef1dc755475913688 100644 (file)
@@ -5,10 +5,11 @@
 
 #define N 32
 
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 int main1 ()
 {
   int i;
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
   float fa[N];
 
   /* int -> float */
index 514fc362068275023b2940594f24060650bae0dc..201d4ab4e3409ecc2ce3f7384910a3a8aa4dc778 100644 (file)
@@ -5,14 +5,15 @@
 
 #define N 16
 
+float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+float d[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
   float a[N];
-  float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
-  float d[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
 
   /* Strided access. Vectorizable on platforms that support load of strided 
      accesses (extract of even/odd vector elements).  */
index 56700aa18b6123ae782afff1e420175f133c7d46..28e85b2e9c06061f556a758e7c248e88115fbcdc 100644 (file)
@@ -5,13 +5,14 @@
 
 #define N 16
 
+int ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int ia[N];
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
-  int ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  int ia[N];
 
   /* This loop is vectorized on platforms that support vect_int_mult.  */
   for (i = 0; i < N; i++)
index 46cc19ad337e95e17a3a255728b2694117e51cd3..3df8f47b5f542eead52790e1c9e64e8fdb178ed3 100644 (file)
@@ -6,13 +6,14 @@
 
 #define N 16
 
+int ia[N];
+int ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 __attribute__ ((noinline)) 
 int main1 ()
 {
   int i;
-  int ia[N];
-  int ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   /* Not vectorizable yet (integer mult).  */
   for (i = 0; i < N; i++)
index 0bc185b361ef71c99e729a77ecfaa98a667a877b..4d954d10829b5eadf88d523d36e57abfacce2971 100644 (file)
@@ -5,13 +5,14 @@
 
 #define N 16
 
+char cb[N] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
+char cc[N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
   int diff = 0;
-  char cb[N] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
-  char cc[N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
 
   /* Cross-iteration cycle.  */
   diff = 0;
index ed1d6794fb1f42f719dab3c3dbe3a5428356c9e9..ce6eaf4548829d2106e3f54a3fd105cff961bbd3 100644 (file)
@@ -23,12 +23,13 @@ struct test1{
   int l;
 };
 
+int a[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
   struct test1 tmp1;
-  int a[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   struct t tmp2;
 
   tmp1.ptr_t = &tmp2;
index 75b1035df4d61683ada389b49f91ae57d23030ea..2da903b1bc498f353d5d5cb4e6d53bb7cb299793 100644 (file)
@@ -6,16 +6,17 @@
 
 extern void abort (void);
 
+unsigned int A[8] = {0x08000000,0xffffffff,0xff0000ff,0xf0000001,
+                    0x08000000,0xffffffff,0xff0000ff,0xf0000001};
+unsigned int B[8] = {0x08000000,0x08000001,0xff0000ff,0xf0000001,
+                    0x08000000,0x08000001,0xff0000ff,0xf0000001};
+unsigned int Answer[8] = {0,0xf7ffffff,0x0200fe01,0xe0000001,
+                         0,0xf7ffffff,0x0200fe01,0xe0000001};
+unsigned int C[8];
+
 __attribute__ ((noinline))
 void u ()
 {  
-  unsigned int A[8] = {0x08000000,0xffffffff,0xff0000ff,0xf0000001,
-                      0x08000000,0xffffffff,0xff0000ff,0xf0000001};
-  unsigned int B[8] = {0x08000000,0x08000001,0xff0000ff,0xf0000001,
-                      0x08000000,0x08000001,0xff0000ff,0xf0000001};
-  unsigned int Answer[8] = {0,0xf7ffffff,0x0200fe01,0xe0000001,
-                           0,0xf7ffffff,0x0200fe01,0xe0000001};
-  unsigned int C[8];
   int i, j;
   
   for (i=0; i<8; i++)
@@ -25,22 +26,23 @@ void u ()
       abort ();
 }
 
+signed int D[8] = {0x08000000,0xffffffff,0xff0000ff,0xf0000001,
+                  0x08000000,0xffffffff,0xff0000ff,0xf0000001};
+signed int E[8] = {0x08000000,0x08000001,0xff0000ff,0xf0000001,
+                  0x08000000,0x08000001,0xff0000ff,0xf0000001};
+signed int Dnswer[8] = {0,0xf7ffffff,0x0200fe01, 0xe0000001,
+                       0,0xf7ffffff,0x0200fe01, 0xe0000001};
+signed int F[8];
+
 __attribute__ ((noinline))
 void s()
 {
-  signed int A[8] = {0x08000000,0xffffffff,0xff0000ff,0xf0000001,
-                    0x08000000,0xffffffff,0xff0000ff,0xf0000001};
-  signed int B[8] = {0x08000000,0x08000001,0xff0000ff,0xf0000001,
-                    0x08000000,0x08000001,0xff0000ff,0xf0000001};
-  signed int Answer[8] = {0,0xf7ffffff,0x0200fe01, 0xe0000001,
-                         0,0xf7ffffff,0x0200fe01, 0xe0000001};
-  signed int C[8];
   int i, j;
   
   for (i=0; i<8; i++)
-    C[i] = A[i] * B[i];
+    F[i] = D[i] * E[i];
   for (i=0; i<8; i++)
-    if (C[i] != Answer[i])
+    if (F[i] != Dnswer[i])
       abort ();
 }
 
index 4e80bd4cbf20778378d8a66a1f27fdb489cc1128..df18f774e5dc163f17ca148309da4c2f5f453dd3 100644 (file)
@@ -4,15 +4,16 @@
 #include "tree-vect.h"
 
 #define N 16
+
+struct {
+  char ca[N];
+} s;
+char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
  
 __attribute__ ((noinline))
 int main1 ()
 {  
   int i;
-  struct {
-    char ca[N];
-  } s;
-  char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   for (i = 0; i < N; i++)
     {
index 3a4036765fad258f10ddcae1f54d077cb9396624..c11784a4b2bbce97d4079575158f91f1e937942d 100644 (file)
@@ -5,12 +5,13 @@
 
 #define N 16
 
+short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int ia[N];
+
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
-  short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  int ia[N];
 
   /* Requires type promotion (vector unpacking) support.  */
   for (i = 0; i < N; i++)
index 527aeef14aa850dab2b71c5c286f5fb5ba0bde21..c95c503c9410d1e19a26cd6c4f132e170301be27 100644 (file)
@@ -5,6 +5,9 @@
 
 #define N 16
  
+char x[N] __attribute__ ((__aligned__(16)));
+char cb[N] __attribute__ ((__aligned__(16))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 __attribute__ ((noinline))
 int main1 ()
 {  
@@ -13,8 +16,6 @@ int main1 ()
     char *q;
   } s;
   int i;
-  char x[N] __attribute__ ((__aligned__(16)));
-  char cb[N] __attribute__ ((__aligned__(16))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   /* Check that datarefs analysis can determine that the access via pointer
      s.p is based off array x, which enables us to antialias this access from
index a0f078c31f057fa52b6fdf19ac5e5279a8fcfc65..f6bf22da93e7d94f3abc447a5cbe6dba777b836a 100644 (file)
@@ -14,11 +14,12 @@ struct foo {
   int y[N];
 } __attribute__((packed));
 
+int x[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline)) int
 main1 (struct foo * __restrict__ p)
 {
   int i;
-  int x[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
 
   for (i = 0; i < N; i++)
     {
index 1647193bd63e224316b378567b6d83cb676916c2..3035ee392b392249b50a2a1ef6eafc946e5d1f14 100644 (file)
@@ -5,12 +5,13 @@
 
 #define N 32
 
+float fb[N] = {0.4,3.5,6.6,9.4,12.5,15.6,18.4,21.5,24.6,27.4,30.5,33.6,36.4,39.5,42.6,45.4,0.5,3.6,6.4,9.5,12.6,15.4,18.5,21.6,24.4,27.5,30.6,33.4,36.5,39.6,42.4,45.5};
+double da[N];
+
 __attribute__ ((noinline)) int
 main1 ()
 {
   int i;
-  float fb[N] = {0.4,3.5,6.6,9.4,12.5,15.6,18.4,21.5,24.6,27.4,30.5,33.6,36.4,39.5,42.6,45.4,0.5,3.6,6.4,9.5,12.6,15.4,18.5,21.6,24.4,27.5,30.6,33.4,36.5,39.6,42.4,45.5};
-  double da[N];
 
   /* float -> double */
   for (i = 0; i < N; i++)
index d9b222881459192ace64cf087a89a58e58c33a76..e5b72f1acabb2d4e5873de8d41901b545a8696d1 100644 (file)
@@ -5,12 +5,13 @@
 
 #define N 32
 
+float fb[N] = {0.4,3.5,6.6,9.4,12.5,15.6,18.4,21.5,24.6,27.4,30.5,33.6,36.4,39.5,42.6,45.4,0.5,3.6,6.4,9.5,12.6,15.4,18.5,21.6,24.4,27.5,30.6,33.4,36.5,39.6,42.4,45.5};
+int ia[N];
+
 __attribute__ ((noinline)) int
 main1 ()
 {
   int i;
-  float fb[N] = {0.4,3.5,6.6,9.4,12.5,15.6,18.4,21.5,24.6,27.4,30.5,33.6,36.4,39.5,42.6,45.4,0.5,3.6,6.4,9.5,12.6,15.4,18.5,21.6,24.4,27.5,30.6,33.4,36.5,39.6,42.4,45.5};
-  int ia[N];
 
   /* float -> int */
   for (i = 0; i < N; i++)
index de7da97efa3dce4445de8fa96f7cdb1270481339..8071c87d09c13a7ccbbb0db8e0300a19d3617a09 100644 (file)
 
 extern void abort(void); 
 
+float A[N] = {36,39,42,45,43,32,21,42,23,34,45,56,67,42,89,11};
+float B[N] = {42,42,0,42,42,42,42,0,42,42,42,42,42,0,42,42};
+
 int main ()
 {  
-  float A[N] = {36,39,42,45,43,32,21,42,23,34,45,56,67,42,89,11};
-  float B[N] = {42,42,0,42,42,42,42,0,42,42,42,42,42,0,42,42};
   int i, j;
 
   check_vect ();
index 0a497b524bd6a064a85ad2d1a128b3ffe0c145ae..a02c8984e5821fa8889f89ee32977c5209477c51 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,42,78,89,11};
+float B[N] = {42,42,0,42,42,42,42,42,42,42,42,42,0,42,42,42};
+
 extern void abort(void);
 
 int main ()
 {
-  float A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,42,78,89,11};
-  float B[N] = {42,42,0,42,42,42,42,42,42,42,42,42,0,42,42,42};
   int i, j;
 
   check_vect ();
index a89bd8f88f7de3dd65fb971e72fe049185704556..e899f126d8c1c4bac82a82a953fbfb039f2953d6 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+int B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
+
 extern void abort(void); 
 
 int main ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  int B[N] = {0,0,42,42,42,0,0,0,0,0,42,42,42,42,42,0};
   int i, j;
 
   check_vect ();
index 902b1549fa0f882c2e8e6c798b1ba757313ef744..1d8e9f52b23fc578542085381cfea6d7be166b1d 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+int B[N] = {0,0,0,42,42,0,0,0,0,0,42,42,42,42,42,0};
+
 extern void abort(void); 
 
 int main ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  int B[N] = {0,0,0,42,42,0,0,0,0,0,42,42,42,42,42,0};
   int i, j;
 
   check_vect ();
index a057ccbd0c0a5bf050b4263ce3cb7596bfa5f78a..1680cba8a8857013ec836808311a5a7644e65527 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+int B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  int B[N] = {42,42,42,0,0,42,42,42,42,42,0,0,0,0,0,42};
   int i, j;
 
   check_vect ();
index 879741062aadfcf31f184ccfa0110315ccb69951..5fc9674b3173b5df0960af07c7ddefc97c1a31c3 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
+int B[N] = {42,42,0,0,0,42,42,42,42,42,0,0,0,0,0,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,67,78,89,11};
-  int B[N] = {42,42,0,0,0,42,42,42,42,42,0,0,0,0,0,42};
   int i, j;
 
   check_vect ();
index f2330bd6aa9545ebc47622405cb5bcea4e8bea6b..24e8c969e1cdeecf2f8837692805a2cfecb7715f 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,42,23,34,45,56,67,42,89,11};
+int B[N] = {42,42,0,42,42,42,42,0,42,42,42,42,42,0,42,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,42,23,34,45,56,67,42,89,11};
-  int B[N] = {42,42,0,42,42,42,42,0,42,42,42,42,42,0,42,42};
   int i, j;
 
   check_vect ();
index fa89d8328901aa70ef4e79f9ac1eef9ab062df01..fa4cf3a58fa11b3047a258844b7ba6b4d74292ce 100644 (file)
@@ -8,12 +8,13 @@
 #define N 16
 #define MAX 42
 
+int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,42,78,89,11};
+int B[N] = {42,42,0,42,42,42,42,42,42,42,42,42,0,42,42,42};
+
 extern void abort(void); 
 
 int main ()
 {  
-  int A[N] = {36,39,42,45,43,32,21,12,23,34,45,56,42,78,89,11};
-  int B[N] = {42,42,0,42,42,42,42,42,42,42,42,42,0,42,42,42};
   int i, j;
 
   check_vect ();
index d3d049186b08ea04462d3c1013ba7df1bb2f97ae..90f33a508a6ac5ac986e87e26e5880d9503a7b36 100644 (file)
@@ -5,11 +5,12 @@
 
 #define N 32
 
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+float fa[N];
+
 __attribute__ ((noinline)) int main1 ()
 {
   int i;
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  float fa[N];
 
   /* int -> float */
   for (i = 0; i < N; i++)
index 10c49d6279ed40e1dd5e956c6bd51e34a3f76e5c..87f200119d6c487be9e732307311e92e215fa185 100644 (file)
@@ -5,12 +5,13 @@
 
 #define N 32
 
+int int_arr[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+float float_arr[N];
+char char_arr[N];
+
 __attribute__ ((noinline)) int main1 ()
 {
   int i;
-  int int_arr[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  float float_arr[N];
-  char char_arr[N];
 
   for (i = 0; i < N; i++){
     float_arr[i] = (float) int_arr[i];
index 0da797749672520b314fb54d4f57c27bf1e3b406..d5f25df7190c28cceffab07943a6e738142ebe48 100644 (file)
@@ -5,11 +5,12 @@
 
 #define N 32
 
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+double da[N];
+
 __attribute__ ((noinline)) int main1 ()
 {
   int i;
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  double da[N];
 
   /* int -> double */
   for (i = 0; i < N; i++)
index 4223c378d42e5d32d24c33773e4c91c4e4129eaf..af8344ba6004c4ec32d7e1de1139f98e9820ff3f 100644 (file)
@@ -5,11 +5,12 @@
 
 #define N 32
 
+short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,-3,-6,-9,-12,-15,-18,-21,-24,-27,-30,-33,-36,-39,-42,-45};
+float fa[N];
+
 __attribute__ ((noinline)) int main1 ()
 {
   int i;
-  short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,-3,-6,-9,-12,-15,-18,-21,-24,-27,-30,-33,-36,-39,-42,-45};
-  float fa[N];
 
   /* short -> float */
   for (i = 0; i < N; i++)
index 29af8e5f53a53ebdc385e64f071107e44caebf1e..51ea056fa1dcf361aa94717bbddbc40c40100318 100644 (file)
@@ -5,11 +5,12 @@
 
 #define N 32
 
+unsigned short usb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,65533,65530,65527,65524,65521,65518,65515,65512,65509,65506,65503,65500,65497,65494,65491};
+float fa[N];
+
 __attribute__ ((noinline)) int main1 ()
 {
   int i;
-  unsigned short usb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,65533,65530,65527,65524,65521,65518,65515,65512,65509,65506,65503,65500,65497,65494,65491};
-  float fa[N];
 
   /* unsigned short -> float */
   for (i = 0; i < N; i++)
index 6abe9f5fb06490cc85daf50b728c34835ea13e8e..4ae47f2c58ec65030766e8c02a5ae97dceb3f33b 100644 (file)
@@ -5,15 +5,16 @@
 
 #define N 32
 
+int ia[N];
+int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+short sa[N];
+short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+char ca[N];
+char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 __attribute__ ((noinline)) int main1 ()
 {
   int i;
-  int ia[N];
-  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  short sa[N];
-  short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  char ca[N];
-  char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   /* Multiple types with different sizes, used in independent
      cmputations. Vectorizable. All accesses aligned.   */
index 33da531bb54eee0cf309d31550cbb3b7b18a91a5..bfa95524b5425c69a0fad4080b3bf04f9f01e8e6 100644 (file)
@@ -5,19 +5,20 @@
 
 #define N 32
 
+unsigned int ia[N];
+unsigned int ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned short sa[N];
+unsigned short sc[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char ca[N];
+unsigned char cc[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
-  unsigned int ia[N];
-  unsigned int ic[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned short sa[N];
-  unsigned short sc[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned short sb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char ca[N];
-  unsigned char cc[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 
   /* Multiple types with different sizes, used in independent
      computations. Vectorizable. All accesses aligned.  */
index 63cd3c03baf49897401f29a8e5d9b851e6af1b40..dbb154d1233d38eb434d84899538f403934b79d7 100644 (file)
@@ -6,14 +6,15 @@
 #define N 16
 #define DIFF 242
 
+unsigned int ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned int uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 /* Test vectorization of reduction of unsigned-int.  */
 
 __attribute__ ((noinline))
 void main1 (unsigned int x, unsigned int max_result, unsigned int min_result)
 {
   int i;
-  unsigned int ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned int uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned int udiff = 2;
   unsigned int umax = x;
   unsigned int umin = x;
index bf053dc0b272f98fb98d84d7b73b7ea29f6d8759..5a1c03d113fbb3b6453a62c7c1d0602d0f66188e 100644 (file)
@@ -6,12 +6,13 @@
 #define N 16
 #define DIFF 242
 
+unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline)) void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
 {
   int i;
-  unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned char udiff = 2;
   unsigned char umax = x;
   unsigned char umin = x;
index 0947ca3c70e8e49675f6daa839fdb5227cf4bc76..145722a1946f1472b34119449131d2de26ec1eba 100644 (file)
@@ -6,12 +6,13 @@
 #define N 16
 #define DIFF 242
 
+unsigned short ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned short uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline)) void
 main1 (unsigned short x, unsigned short max_result, unsigned short min_result)
 {
   int i;
-  unsigned short ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned short uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned short  udiff = 2;
   unsigned short umax = x;
   unsigned short umin = x;
index b23dfbaf7ea26ec806ba05de9548e97cbac64832..912e69c93c2d9c3eb07f31c56d765c8f46adfb5a 100644 (file)
@@ -6,14 +6,15 @@
 #define N 16
 #define DIFF 240
 
+int b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 /* Test vectorization of reduction of signed-int.  */
 
 __attribute__ ((noinline))
 void main1 (int x, int max_result, int min_result)
 {
   int i;
-  int b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  int c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   int diff = 0;
   int max = x;
   int min = x;
index 49214201fb3e70122dbc63e3f95457ea2b3cb20b..3e6f17c485a0567328269fceabc99a907aba8b80 100644 (file)
@@ -5,6 +5,9 @@
 
 #define N 16
 
+unsigned int ub[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+unsigned int uc[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 /* Test vectorization of reduction of unsigned-int in the presence
    of unknown-loop-bound.  */
 
@@ -12,8 +15,6 @@ __attribute__ ((noinline))
 int main1 (int n, int res)
 {
   int i;
-  unsigned int ub[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  unsigned int uc[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   unsigned int udiff;
 
   udiff = 0;
index 346fffee102d51748533af6bb42c48fd88d25500..79699047eda0ef9a2ea07c9d250e5c4970f847cf 100644 (file)
@@ -6,12 +6,13 @@
 
 #define N 8
 
+unsigned int A[N] = { 0x08000000, 0x08000001, 0x0ff0000ff, 0xf0000001,
+                     0x08000000, 0x08000001, 0x0ff0000ff, 0xf0000001 };
+unsigned int B[N] = { 0x01000000, 0x01000000, 0x01fe0001f, 0x1e000000,
+                     0x01000000, 0x01000000, 0x01fe0001f, 0x1e000000 };
+
 int main ()
 {
-  unsigned int A[N] = { 0x08000000, 0x08000001, 0x0ff0000ff, 0xf0000001,
-                       0x08000000, 0x08000001, 0x0ff0000ff, 0xf0000001 };
-  unsigned int B[N] = { 0x01000000, 0x01000000, 0x01fe0001f, 0x1e000000,
-                       0x01000000, 0x01000000, 0x01fe0001f, 0x1e000000 };
   int i;
 
   check_vect ();
index 2417f2acd3990e6eb9ef59e54ba3c211f06fbf7a..38c50b9cd4351a98ff653141143099d48b9b779f 100644 (file)
@@ -5,13 +5,14 @@
 
 #define N 16
 
+float b[N*2] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93};
+float c[N*2] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
   float a[N*2];
-  float b[N*2] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93};
-  float c[N*2] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
 
   /* Strided access pattern.  */
   for (i = 0; i < N/2; i++)
index ecc567c19444467be066cffb7953371eca73bc42..1eaad43541692800329a17ac8004533407e92f8f 100644 (file)
@@ -6,13 +6,14 @@
 
 #define N 16
 
+int a[N*2];
+int b[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
+int c[N] = {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31};
+
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
-  int a[N*2];
-  int b[N] = {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
-  int c[N] = {1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31};
 
   /* Strided access pattern.  */
   for (i = 0; i < N/2; i++)
index 560229f1ebb276872af388e97d4445b2a96a19da..4b04a9d41c34db42f2c444fe0ac77350c29903db 100644 (file)
@@ -6,12 +6,13 @@
 #define N 16
 #define DIFF 121
 
+signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
+signed char c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline))
 void main1 (signed char x, signed char max_result, signed char min_result)
 {
   int i;
-  signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
-  signed char c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   signed char diff = 2;
   signed char max = x;
   signed char min = x;
index e6e8c6ffe9506fd0573e37d4472ac3c5ca1ab237..0468b1966b9b16e3b9e4747bbfb1087cc6392a1a 100644 (file)
@@ -6,12 +6,13 @@
 #define N 16
 #define DIFF 242
 
+short b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+short c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+
 __attribute__ ((noinline))
 void main1 (short x, short max_result, short min_result)
 {
   int i;
-  short b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  short c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   short diff = 2;
   short max = x;
   short min = x;
index 9e8ff56495edc253017b35261e199de14b8de4bc..cc5678258a1482b10bf8c5991ee03d2ff23a6eb7 100644 (file)
@@ -1566,7 +1566,7 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2,
          {
            tree result = vn_reference_lookup_pieces (newvuses,
                                                      newoperands,
-                                                     &newref);
+                                                     &newref, true);
            unsigned int new_val_id;
 
            if (newref)
@@ -2499,8 +2499,12 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
        genop1 = fold_convert (build_pointer_type (currop->type),
                               genop1);
 
-       folded = fold_build1 (currop->opcode, currop->type,
-                             genop1);
+       if (currop->opcode == MISALIGNED_INDIRECT_REF)
+         folded = fold_build2 (currop->opcode, currop->type,
+                               genop1, currop->op1);
+       else
+         folded = fold_build1 (currop->opcode, currop->type,
+                               genop1);
        return folded;
       }
       break;
@@ -3139,6 +3143,7 @@ do_regular_insertion (basic_block block, basic_block dom)
          basic_block bprime;
          pre_expr eprime = NULL;
          edge_iterator ei;
+         pre_expr edoubleprime;
 
          val = get_expr_value_id (expr);
          if (bitmap_set_contains_value (PHI_GEN (block), val))
@@ -3154,7 +3159,6 @@ do_regular_insertion (basic_block block, basic_block dom)
          FOR_EACH_EDGE (pred, ei, block->preds)
            {
              unsigned int vprime;
-             pre_expr edoubleprime;
 
              /* This can happen in the very weird case
                 that our fake infinite loop edges have caused a
@@ -3216,7 +3220,8 @@ do_regular_insertion (basic_block block, basic_block dom)
             an invariant, then the PHI has the same value on all
             edges.  Note this.  */
          else if (!cant_insert && all_same && eprime
-                  && eprime->kind == CONSTANT
+                  && (edoubleprime->kind == CONSTANT
+                      || edoubleprime->kind == NAME)
                   && !value_id_constant_p (val))
            {
              unsigned int j;
@@ -3224,7 +3229,7 @@ do_regular_insertion (basic_block block, basic_block dom)
              bitmap_set_t exprset = VEC_index (bitmap_set_t,
                                                value_expressions, val);
 
-             unsigned int new_val = get_expr_value_id (eprime);
+             unsigned int new_val = get_expr_value_id (edoubleprime);
              FOR_EACH_EXPR_ID_IN_SET (exprset, j, bi)
                {
                  pre_expr expr = expression_for_id (j);
@@ -3234,9 +3239,14 @@ do_regular_insertion (basic_block block, basic_block dom)
                      vn_ssa_aux_t info = VN_INFO (PRE_EXPR_NAME (expr));
                      /* Just reset the value id and valnum so it is
                         the same as the constant we have discovered.  */
-                     info->valnum = PRE_EXPR_CONSTANT (eprime);
+                     if (edoubleprime->kind == CONSTANT)
+                       {
+                         info->valnum = PRE_EXPR_CONSTANT (edoubleprime);
+                         pre_stats.constified++;
+                       }
+                     else
+                       info->valnum = PRE_EXPR_NAME (edoubleprime);
                      info->value_id = new_val;
-                     pre_stats.constified++;
                    }
                }
            }
@@ -3594,7 +3604,7 @@ compute_avail (void)
 
                copy_reference_ops_from_call (stmt, &ops);
                vn_reference_lookup_pieces (shared_vuses_from_stmt (stmt),
-                                           ops, &ref);
+                                           ops, &ref, false);
                VEC_free (vn_reference_op_s, heap, ops);
                if (!ref)
                  continue;
index f502440b46fb7d44858acffd1d0533ad4ad905ad..26a65f126e11ce113fb1ff100f62979190063b98 100644 (file)
@@ -595,11 +595,13 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result)
       switch (temp.opcode)
        {
        case ALIGN_INDIRECT_REF:
-       case MISALIGNED_INDIRECT_REF:
        case INDIRECT_REF:
          /* The only operand is the address, which gets its own
             vn_reference_op_s structure.  */
          break;
+       case MISALIGNED_INDIRECT_REF:
+         temp.op0 = TREE_OPERAND (ref, 1);
+         break;
        case BIT_FIELD_REF:
          /* Record bits and position.  */
          temp.op0 = TREE_OPERAND (ref, 1);
@@ -676,6 +678,92 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result)
     }
 }
 
+/* Re-create a reference tree from the reference ops OPS.
+   Returns NULL_TREE if the ops were not handled.
+   This routine needs to be kept in sync with copy_reference_ops_from_ref.  */
+
+static tree
+get_ref_from_reference_ops (VEC(vn_reference_op_s, heap) *ops)
+{
+  vn_reference_op_t op;
+  unsigned i;
+  tree ref, *op0_p = &ref;
+
+  for (i = 0; VEC_iterate (vn_reference_op_s, ops, i, op); ++i)
+    {
+      switch (op->opcode)
+       {
+       case CALL_EXPR:
+         return NULL_TREE;
+
+       case ALIGN_INDIRECT_REF:
+       case INDIRECT_REF:
+         *op0_p = build1 (op->opcode, op->type, NULL_TREE);
+         op0_p = &TREE_OPERAND (*op0_p, 0);
+         break;
+
+       case MISALIGNED_INDIRECT_REF:
+         *op0_p = build2 (MISALIGNED_INDIRECT_REF, op->type,
+                          NULL_TREE, op->op0);
+         op0_p = &TREE_OPERAND (*op0_p, 0);
+         break;
+
+       case BIT_FIELD_REF:
+         *op0_p = build3 (BIT_FIELD_REF, op->type, NULL_TREE,
+                          op->op0, op->op1);
+         op0_p = &TREE_OPERAND (*op0_p, 0);
+         break;
+
+       case COMPONENT_REF:
+         *op0_p = build3 (COMPONENT_REF, TREE_TYPE (op->op0), NULL_TREE,
+                          op->op0, op->op1);
+         op0_p = &TREE_OPERAND (*op0_p, 0);
+         break;
+
+       case ARRAY_RANGE_REF:
+       case ARRAY_REF:
+         *op0_p = build4 (op->opcode, op->type, NULL_TREE,
+                          op->op0, op->op1, op->op2);
+         op0_p = &TREE_OPERAND (*op0_p, 0);
+         break;
+
+       case STRING_CST:
+       case INTEGER_CST:
+       case COMPLEX_CST:
+       case VECTOR_CST:
+       case REAL_CST:
+       case CONSTRUCTOR:
+       case VAR_DECL:
+       case PARM_DECL:
+       case CONST_DECL:
+       case RESULT_DECL:
+       case SSA_NAME:
+         *op0_p = op->op0;
+         break;
+
+       case ADDR_EXPR:
+         if (op->op0 != NULL_TREE)
+           {
+             gcc_assert (is_gimple_min_invariant (op->op0));
+             *op0_p = op->op0;
+             break;
+           }
+         /* Fallthrough.  */
+       case IMAGPART_EXPR:
+       case REALPART_EXPR:
+       case VIEW_CONVERT_EXPR:
+         *op0_p = build1 (op->opcode, op->type, NULL_TREE);
+         op0_p = &TREE_OPERAND (*op0_p, 0);
+         break;
+
+       default:
+         return NULL_TREE;
+       }
+    }
+
+  return ref;
+}
+
 /* Copy the operations present in load/store/call REF into RESULT, a vector of
    vn_reference_op_s's.  */
 
@@ -895,7 +983,7 @@ vn_reference_lookup_1 (vn_reference_t vr, vn_reference_t *vnresult)
 tree
 vn_reference_lookup_pieces (VEC (tree, gc) *vuses,
                            VEC (vn_reference_op_s, heap) *operands,
-                           vn_reference_t *vnresult
+                           vn_reference_t *vnresult, bool maywalk)
 {
   struct vn_reference_s vr1;
   tree result;
@@ -907,6 +995,28 @@ vn_reference_lookup_pieces (VEC (tree, gc) *vuses,
   vr1.hashcode = vn_reference_compute_hash (&vr1);
   result = vn_reference_lookup_1 (&vr1, vnresult);
 
+  /* If there is a single defining statement for all virtual uses, we can
+     use that, following virtual use-def chains.  */
+  if (!result
+      && maywalk
+      && vr1.vuses
+      && VEC_length (tree, vr1.vuses) >= 1)
+    {
+      tree ref = get_ref_from_reference_ops (operands);
+      gimple def_stmt;
+      if (ref
+         && (def_stmt = get_def_ref_stmt_vuses (ref, vr1.vuses))
+         && is_gimple_assign (def_stmt))
+       {
+         /* We are now at an aliasing definition for the vuses we want to
+            look up.  Re-do the lookup with the vdefs for this stmt.  */
+         vdefs_to_vec (def_stmt, &vuses);
+         vr1.vuses = valueize_vuses (vuses);
+         vr1.hashcode = vn_reference_compute_hash (&vr1);
+         result = vn_reference_lookup_1 (&vr1, vnresult);
+       }
+    }
+
   return result;
 }
 
index d648cd9bb94b7a516b3541707b7aa3349fc0e8ea..49baa761831d4847bbece91337f416ee196435db 100644 (file)
@@ -178,7 +178,7 @@ void copy_reference_ops_from_ref (tree, VEC(vn_reference_op_s, heap) **);
 void copy_reference_ops_from_call (gimple, VEC(vn_reference_op_s, heap) **);
 tree vn_reference_lookup_pieces (VEC (tree, gc) *,
                                 VEC (vn_reference_op_s, heap) *,
-                                vn_reference_t *);
+                                vn_reference_t *, bool);
 tree vn_reference_lookup (tree, VEC (tree, gc) *, bool, vn_reference_t *);
 vn_reference_t vn_reference_insert (tree, tree, VEC (tree, gc) *);
 vn_reference_t vn_reference_insert_pieces (VEC (tree, gc) *,