[Bug tree-optimization/50412] gfortran -Ofast ICE in vect_do_peeling_for_loop_bound

2011-09-18 Thread irar at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50412

--- Comment #3 from irar at gcc dot gnu.org 2011-09-18 08:59:58 UTC ---
Author: irar
Date: Sun Sep 18 08:59:52 2011
New Revision: 178940

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=178940
Log:

PR tree-optimization/50412
* tree-vect-data-refs.c (vect_analyze_group_access): Fail for
acceses that require epilogue loop if vectorizing outer loop.


Added:
trunk/gcc/testsuite/gfortran.dg/vect/pr50412.f90
Modified:
trunk/gcc/ChangeLog
trunk/gcc/testsuite/ChangeLog
trunk/gcc/tree-vect-data-refs.c


[Bug tree-optimization/50412] gfortran -Ofast ICE in vect_do_peeling_for_loop_bound

2011-09-15 Thread Joost.VandeVondele at pci dot uzh.ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50412

Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2011-09-15
  Component|fortran |tree-optimization
 Ever Confirmed|0   |1

--- Comment #1 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 
2011-09-15 10:05:27 UTC ---
#0  internal_error (gmsgid=0x117c39a in %s, at %s:%d) at
../../gcc/gcc/diagnostic.c:833
#1  0x00e3f394 in fancy_abort (file=Unhandled dwarf expression opcode
0xf3
) at ../../gcc/gcc/diagnostic.c:893
#2  0x00aa5fce in vect_do_peeling_for_loop_bound (loop_vinfo=0x16e3870,
ratio=0x7fffda58, cond_expr=0x0, cond_expr_stmt_list=0x0)
at ../../gcc/gcc/tree-vect-loop-manip.c:1931
#3  0x00aa1c7c in vect_transform_loop (loop_vinfo=0x16e3870) at
../../gcc/gcc/tree-vect-loop.c:5161
#4  0x00aae7e3 in vectorize_loops () at
../../gcc/gcc/tree-vectorizer.c:214
#5  0x00876d37 in execute_one_pass (pass=0x1498f00) at
../../gcc/gcc/passes.c:2063


[Bug tree-optimization/50412] gfortran -Ofast ICE in vect_do_peeling_for_loop_bound

2011-09-15 Thread irar at il dot ibm.com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50412

Ira Rosen irar at il dot ibm.com changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 CC||irar at il dot ibm.com
 AssignedTo|unassigned at gcc dot   |irar at il dot ibm.com
   |gnu.org |

--- Comment #2 from Ira Rosen irar at il dot ibm.com 2011-09-15 11:40:59 UTC 
---
The problem is that we don't support loop peeling for outer loops, but we
support single element interleaving that may require peeling. I'll test this
patch:

Index: tree-vect-data-refs.c
===
--- tree-vect-data-refs.c   (revision 178780)
+++ tree-vect-data-refs.c   (working copy)
@@ -2055,6 +2059,10 @@ vect_analyze_group_access (struct data_r
   HOST_WIDE_INT dr_step = TREE_INT_CST_LOW (step);
   HOST_WIDE_INT stride, last_accessed_element = 1;
   bool slp_impossible = false;
+  struct loop *loop = NULL;
+
+  if (loop_vinfo)
+loop = LOOP_VINFO_LOOP (loop_vinfo);

   /* For interleaving, STRIDE is STEP counted in elements, i.e., the size of
the
  interleaving group (including gaps).  */
@@ -2085,11 +2093,17 @@ vect_analyze_group_access (struct data_r

  if (loop_vinfo)
{
- LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
-
  if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, Data access with gaps requires scalar 
epilogue loop);
+  if (loop-inner)
+{
+  if (vect_print_dump_info (REPORT_DETAILS))
+fprintf (vect_dump, Peeling for outer loop is not
supported);
+  return false;
+}
+
+ LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
}

  return true;
@@ -2272,10 +2286,17 @@ vect_analyze_group_access (struct data_r
   /* There is a gap in the end of the group.  */
   if (stride - last_accessed_element  0  loop_vinfo)
{
- LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
  if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, Data access with gaps requires scalar 
epilogue loop);
+  if (loop-inner)
+{
+  if (vect_print_dump_info (REPORT_DETAILS))
+fprintf (vect_dump, Peeling for outer loop is not
supported);
+  return false;
+}
+
+ LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
}
 }