re PR target/84710 (ICE: RTL check: expected code 'reg', have 'subreg' in rhs_regno...
authorJakub Jelinek <jakub@redhat.com>
Tue, 6 Mar 2018 20:41:37 +0000 (21:41 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 6 Mar 2018 20:41:37 +0000 (21:41 +0100)
PR target/84710
* combine.c (try_combine): Use reg_or_subregno instead of handling
just paradoxical SUBREGs and REGs.

* gcc.dg/pr84710.c: New test.

From-SVN: r258301

gcc/ChangeLog
gcc/combine.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr84710.c [new file with mode: 0644]

index 130aec7ad027c03ebbc65e2e2e9b5568281f647c..8cf95c717861e092b968bbe36fc0035e90282162 100644 (file)
@@ -1,3 +1,9 @@
+2018-03-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/84710
+       * combine.c (try_combine): Use reg_or_subregno instead of handling
+       just paradoxical SUBREGs and REGs.
+
 2018-03-06  Claudiu Zissulescu  <claziss@synopsys.com>
 
         * config/arc/arc.c (arc_finalize_pic): Remove function.
index a4efd11703cf903a042fd2de9c1609c35e8250b1..c9105ed02b381ae62bec514a06aef9ab74f0f517 100644 (file)
@@ -4283,12 +4283,8 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
       if (GET_CODE (x) == PARALLEL)
        x = XVECEXP (newi2pat, 0, 0);
 
-      /* It can only be a SET of a REG or of a paradoxical SUBREG of a REG.  */
-      x = SET_DEST (x);
-      if (paradoxical_subreg_p (x))
-       x = SUBREG_REG (x);
-
-      unsigned int regno = REGNO (x);
+      /* It can only be a SET of a REG or of a SUBREG of a REG.  */
+      unsigned int regno = reg_or_subregno (SET_DEST (x));
 
       bool done = false;
       for (rtx_insn *insn = NEXT_INSN (i3);
index 46a329aad3eb4cb9488c3e0270014d6770f4bd29..c78c70bc931706efb620a809b95813fb69150413 100644 (file)
@@ -1,3 +1,8 @@
+2018-03-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/84710
+       * gcc.dg/pr84710.c: New test.
+
 2018-03-06  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/56667
diff --git a/gcc/testsuite/gcc.dg/pr84710.c b/gcc/testsuite/gcc.dg/pr84710.c
new file mode 100644 (file)
index 0000000..6477244
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR target/84710 */
+/* { dg-do compile } */
+/* { dg-options "-O -fno-forward-propagate" } */
+
+char a;
+int b;
+
+void
+foo (void)
+{
+  int d;
+  b = __builtin_mul_overflow ((char) d, 0xfe, &a);
+}