This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/33680] [4.3 Regression] ICE when compilling elbg.c from ffmpeg (vectorizer)
- From: "jakub at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 31 Oct 2007 16:32:03 -0000
- Subject: [Bug tree-optimization/33680] [4.3 Regression] ICE when compilling elbg.c from ffmpeg (vectorizer)
- References: <bug-33680-10490@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #20 from jakub at gcc dot gnu dot org 2007-10-31 16:31 -------
What I'd try instead is something like:
--- tree-data-ref.c.jj11 2007-10-28 19:34:10.000000000 +0100
+++ tree-data-ref.c 2007-10-31 16:22:21.000000000 +0100
@@ -629,7 +629,7 @@ dr_analyze_innermost (struct data_refere
enum machine_mode pmode;
int punsignedp, pvolatilep;
affine_iv base_iv, offset_iv;
- tree init, dinit, step;
+ tree init, dinit, step, type;
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "analyze_innermost: ");
@@ -666,9 +666,21 @@ dr_analyze_innermost (struct data_refere
init = ssize_int (pbitpos / BITS_PER_UNIT);
split_constant_offset (base_iv.base, &base_iv.base, &dinit);
- init = size_binop (PLUS_EXPR, init, dinit);
+ init = size_binop (PLUS_EXPR, init, dinit);
split_constant_offset (offset_iv.base, &offset_iv.base, &dinit);
- init = size_binop (PLUS_EXPR, init, dinit);
+ init = size_binop (PLUS_EXPR, init, dinit);
+
+ /* See if base address involves a variable length type somewhere.
+ Bases with such types shouldn't be gimplified again. */
+ type = TREE_TYPE (base_iv.base);
+ while (POINTER_TYPE_P (type))
+ type = TREE_TYPE (type);
+ if (int_size_in_bytes (type) < 0)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "failed: base involves a variable length
type.\n");
+ return;
+ }
step = size_binop (PLUS_EXPR,
fold_convert (ssizetype, base_iv.step),
or similar check in the vectorizer instead. This exact patch breaks
gfortran.dg/vect/vect-3.f90 and gfortran.dg/vect/pr19049.f90 (they are no
longer vectorized as expected), would need to see whether it tries to unsafely
gimplify the VLA type sizes in the vectorizer or not.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33680