This fixes PR57275 - when moving dependency testing for gather loads
from data-ref analysis to dependence analysis I put in the wrong
return value (oops) for failed analysis.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2013-05-15  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/57275
        * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Fix
        return value for fail to do runtime alias checks for gather loads.

        * gcc.target/i386/pr57275.c: New testcase.

Index: gcc/tree-vect-data-refs.c
===================================================================
*** gcc/tree-vect-data-refs.c   (revision 198890)
--- gcc/tree-vect-data-refs.c   (working copy)
*************** vect_analyze_data_ref_dependence (struct
*** 269,275 ****
              dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
                                 DR_REF (drb));
            }
!         return false;
        }
  
        if (dump_enabled_p ())
--- 269,275 ----
              dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
                                 DR_REF (drb));
            }
!         return true;
        }
  
        if (dump_enabled_p ())
*************** vect_analyze_data_ref_dependence (struct
*** 305,311 ****
              dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
                                 DR_REF (drb));
            }
!         return false;
        }
  
        if (dump_enabled_p ())
--- 305,311 ----
              dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
                                 DR_REF (drb));
            }
!         return true;
        }
  
        if (dump_enabled_p ())
Index: gcc/testsuite/gcc.target/i386/pr57275.c
===================================================================
*** gcc/testsuite/gcc.target/i386/pr57275.c     (revision 0)
--- gcc/testsuite/gcc.target/i386/pr57275.c     (working copy)
***************
*** 0 ****
--- 1,39 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -march=native" } */
+ 
+ extern void abort (void);
+ 
+ #define N 1024
+ 
+ float a[N], b[N], c[N];
+ int k[N];
+ 
+ __attribute__((noinline, noclone)) void
+ f (void)
+ {
+   int i;
+   for (i = 0; i < N; i++)
+     {
+       a[i] = b[k[i]];
+       b[i] = c[i];
+     }
+ }
+ 
+ int main ()
+ {
+   int i;
+ 
+   for (i = 0; i < N; i++)
+   {
+     k[i] = i%2;
+     b[i] = i;
+     c[i] = 179;
+   }
+ 
+   f ();
+ 
+   if (a[2] != 179 || a[3] != 179)
+     abort ();
+ 
+   return 0;
+ }

Reply via email to