re PR tree-optimization/70985 (ICE on valid code at -O3 on x86_64-linux-gnu: verify_g...
authorRichard Biener <rguenther@suse.de>
Mon, 9 May 2016 12:23:11 +0000 (12:23 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 9 May 2016 12:23:11 +0000 (12:23 +0000)
2016-05-09  Richard Biener  <rguenther@suse.de>

PR tree-optimization/70985
* match.pd (BIT_FIELD_REF -> (type)): Disable on GIMPLE when
op0 isn't a gimple register.

* gcc.dg/torture/pr70985.c: New testcase.

From-SVN: r236032

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr70985.c [new file with mode: 0644]

index d61ec185b2bc8597ab206c0fb97ac3dfb1f53f72..c303b94b900225f6cbc989793bd425179c645fe2 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-09  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/70985
+       * match.pd (BIT_FIELD_REF -> (type)): Disable on GIMPLE when
+       op0 isn't a gimple register.
+
 2016-05-09  Prachi Godbole  <prachi.godbole@imgtec.com>
 
        * config/mips/i6400.md (i6400_fpu_intadd, i6400_fpu_logic)
index 55dd23cc6706ef5dacc310150c39039577f29f16..e511e9a6b9b71d7a42b3bc20b109095fdd465a50 100644 (file)
@@ -3244,6 +3244,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
      (view_convert (imagpart @0)))))
   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
        && INTEGRAL_TYPE_P (type)
+       /* On GIMPLE this should only apply to register arguments.  */
+       && (! GIMPLE || is_gimple_reg (@0))
        /* A bit-field-ref that referenced the full argument can be stripped.  */
        && ((compare_tree_int (@1, TYPE_PRECISION (TREE_TYPE (@0))) == 0
            && integer_zerop (@2))
index bcb75c42cddd346dc14b403bafd6286c7c1da934..9e9745429314a0eca08911a65f12ec107fa62b80 100644 (file)
@@ -1,3 +1,8 @@
+2016-05-09  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/70985
+       * gcc.dg/torture/pr70985.c: New testcase.
+
 2016-05-09  Bin Cheng  <bin.cheng@arm.com>
 
        * gcc.dg/tree-ssa/ifc-9.c: New test.
diff --git a/gcc/testsuite/gcc.dg/torture/pr70985.c b/gcc/testsuite/gcc.dg/torture/pr70985.c
new file mode 100644 (file)
index 0000000..17273b0
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int32plus } */
+
+struct
+{
+  int f0:24;
+} a, c, d;
+
+int b;
+
+int
+fn1 ()
+{
+  return 0;
+}
+
+void
+fn2 ()
+{
+  int e;
+  if (b) 
+    for (; e;)
+      {
+       d = c;
+       if (fn1 (b))
+         b = a.f0;
+      }
+}