Commit 3290f5e7 by Charles Baylis Committed by Charles Baylis

re PR target/61948 ([ARM] [4.10 regression] ICE with DImode shift by 1 bit (in…

re PR target/61948 ([ARM] [4.10 regression] ICE with DImode shift by 1 bit (in copyprop_hardreg_forward_1))

PR target/61948

gcc/ChangeLog:
2014-07-29  Charles Baylis  <charles.baylis@linaro.org>

	PR target/61948
	* config/arm/neon.md (ashldi3_neon): Don't emit arm_ashldi3_1bit unless
	constraints are satisfied.
	(<shift>di3_neon): Likewise.

gcc/testsuite/ChangeLog:
2014-07-29  Charles Baylis  <charles.baylis@linaro.org>

        PR target/61948
        * gcc.target/arm/pr61948.c: New test case.

From-SVN: r213376
parent 030e321a
2014-07-31 Charles Baylis <charles.baylis@linaro.org>
PR target/61948
* config/arm/neon.md (ashldi3_neon): Don't emit arm_ashldi3_1bit unless
constraints are satisfied.
(<shift>di3_neon): Likewise.
2014-07-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/61964
......
......@@ -1041,7 +1041,9 @@
}
else
{
if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 1)
if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 1
&& (!reg_overlap_mentioned_p (operands[0], operands[1])
|| REGNO (operands[0]) == REGNO (operands[1])))
/* This clobbers CC. */
emit_insn (gen_arm_ashldi3_1bit (operands[0], operands[1]));
else
......@@ -1141,7 +1143,9 @@
}
else
{
if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 1)
if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 1
&& (!reg_overlap_mentioned_p (operands[0], operands[1])
|| REGNO (operands[0]) == REGNO (operands[1])))
/* This clobbers CC. */
emit_insn (gen_arm_<shift>di3_1bit (operands[0], operands[1]));
else
......
2014-07-31 Charles Baylis <charles.baylis@linaro.org>
PR target/61948
* gcc.target/arm/pr61948.c: New test case.
2014-07-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/61964
......
/* PR target/61948 */
/* { dg-do compile } */
/* { dg-require-effective-target arm_neon_ok } */
/* { dg-require-effective-target arm_thumb2_ok } */
/* { dg-options "-O2 -mthumb" } */
/* { dg-add-options arm_neon } */
long long f (long long *c)
{
long long t = c[0];
asm ("nop" : : : "r0", "r3", "r4", "r5",
"r6", "r7", "r8", "r9",
"r10", "r11", "r12", "memory");
return t >> 1;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment