diff mbox series

[committed] Fix combiner.c's RTL checking failure (PR target/84710)

Message ID 20180306204407.GZ5867@tucnak
State New
Headers show
Series [committed] Fix combiner.c's RTL checking failure (PR target/84710) | expand

Commit Message

Jakub Jelinek March 6, 2018, 8:44 p.m. UTC
Hi!

As the following testcase shows on aarch64, the SET_DEST can be a normal
subreg, not only a paradoxical one or REG.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
preapproved by Segher in the PR, committed to trunk.

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.

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


	Jakub

Comments

Segher Boessenkool March 6, 2018, 8:50 p.m. UTC | #1
On Tue, Mar 06, 2018 at 09:44:07PM +0100, Jakub Jelinek wrote:
> As the following testcase shows on aarch64, the SET_DEST can be a normal
> subreg, not only a paradoxical one or REG.
> 
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
> preapproved by Segher in the PR, committed to trunk.

Thanks!


Segher


> 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.
> 
> 	* gcc.dg/pr84710.c: New test.
diff mbox series

Patch

--- gcc/combine.c.jj	2018-03-05 23:13:26.478215559 +0100
+++ gcc/combine.c	2018-03-06 08:50:17.756288841 +0100
@@ -4283,12 +4283,8 @@  try_combine (rtx_insn *i3, rtx_insn *i2,
       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);
--- gcc/testsuite/gcc.dg/pr84710.c.jj	2018-03-06 08:56:00.667240389 +0100
+++ gcc/testsuite/gcc.dg/pr84710.c	2018-03-06 08:55:22.637245765 +0100
@@ -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);
+}