OSDN Git Service

2008-08-19 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Aug 2008 09:06:54 +0000 (09:06 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Aug 2008 09:06:54 +0000 (09:06 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139226 138bc75d-0d04-0410-961f-82ee72b054a4

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 0055802..68e7be6 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 ef27c4b..e51e9a6 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 c7f53e1..ac08d3d 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 87f758a..228e979 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 75d0954..45d96fd 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 d462f89..684094d 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 15acb3b..78e5b13 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 f98402e..cef179b 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 31ed2bc..97501c6 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 c0d6b20..7fdcf75 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 b0394c6..d147b81 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 5c4e973..84248ee 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 691026d..e7b13b5 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 55334fd..a7b86ce 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 d18f416..1142e7a 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 55334fd..a7b86ce 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 74bdd26..377d74b 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 b25e114..9f36db2 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 cc3142e..3971c92 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 413c7ef..673346a 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 560b5bc..a35b7ad 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 5f132b8..485e88c 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 a5a5936..58e6dc0 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 a5a5936..58e6dc0 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 67d7ebe..a15a0b1 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 09df31f..bfa0802 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 2c3ac29..329478d 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 e2ad18c..6bc3b5c 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 7b65dfc..9f7c760 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 2051e28..98a203c 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 08b6f84..dde0b74 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 cbc47cd..5ca698f 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 0a760bf..0939f74 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 b3bf073..bd9c751 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 069116a..780a447 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 cf39bf1..0707153 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 d25eef0..3ed56ea 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 5e86410..672b1d6 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 f000fc9..72ec0cd 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 1260ddc..76db4e1 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 514fc36..201d4ab 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 56700aa..28e85b2 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 46cc19a..3df8f47 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 0bc185b..4d954d1 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 ed1d679..ce6eaf4 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 75b1035..2da903b 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 4e80bd4..df18f77 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 3a40367..c11784a 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 527aeef..c95c503 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 a0f078c..f6bf22d 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 1647193..3035ee3 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 d9b2228..e5b72f1 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 de7da97..8071c87 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 0a497b5..a02c898 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 a89bd8f..e899f12 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 902b154..1d8e9f5 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 a057ccb..1680cba 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 8797410..5fc9674 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 f2330bd..24e8c96 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 fa89d83..fa4cf3a 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 d3d0491..90f33a5 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 10c49d6..87f2001 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 0da7977..d5f25df 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 4223c37..af8344b 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 29af8e5..51ea056 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 6abe9f5..4ae47f2 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 33da531..bfa9552 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 63cd3c0..dbb154d 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 bf053dc..5a1c03d 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 0947ca3..145722a 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 b23dfba..912e69c 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 4921420..3e6f17c 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 346fffe..7969904 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 2417f2a..38c50b9 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 ecc567c..1eaad43 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 560229f..4b04a9d 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 e6e8c6f..0468b19 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 9e8ff56..cc56782 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 f502440..26a65f1 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 d648cd9..49baa76 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) *,