[ARM] PR target/79145 Fix xordi3 expander for immediate operands in iWMMXt
PR target/79145 * config/arm/arm.md (xordi3): Force constant operand into a register for TARGET_IWMMXT. * gcc.target/arm/pr79145.c: New test. From-SVN: r244894
This commit is contained in:
parent
a5a2202779
commit
9aa483a2d8
@ -1,3 +1,9 @@
|
||||
2016-01-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
PR target/79145
|
||||
* config/arm/arm.md (xordi3): Force constant operand into a register
|
||||
for TARGET_IWMMXT.
|
||||
|
||||
2016-01-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* doc/invoke.texi (-fstore-merging): Correct default optimization
|
||||
|
@ -3313,7 +3313,14 @@
|
||||
(xor:DI (match_operand:DI 1 "s_register_operand" "")
|
||||
(match_operand:DI 2 "arm_xordi_operand" "")))]
|
||||
"TARGET_32BIT"
|
||||
""
|
||||
{
|
||||
/* The iWMMXt pattern for xordi3 accepts only register operands but we want
|
||||
to reuse this expander for all TARGET_32BIT targets so just force the
|
||||
constants into a register. Unlike for the anddi3 and iordi3 there are
|
||||
no NEON instructions that take an immediate. */
|
||||
if (TARGET_IWMMXT && !REG_P (operands[2]))
|
||||
operands[2] = force_reg (DImode, operands[2]);
|
||||
}
|
||||
)
|
||||
|
||||
(define_insn_and_split "*xordi3_insn"
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-01-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
PR target/79145
|
||||
* gcc.target/arm/pr79145.c: New test.
|
||||
|
||||
2017-01-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR debug/78363
|
||||
|
16
gcc/testsuite/gcc.target/arm/pr79145.c
Normal file
16
gcc/testsuite/gcc.target/arm/pr79145.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
|
||||
/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
|
||||
/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
|
||||
/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
|
||||
/* { dg-require-effective-target arm32 } */
|
||||
/* { dg-require-effective-target arm_iwmmxt_ok } */
|
||||
/* { dg-options "-mcpu=iwmmxt" } */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
volatile long long t1;
|
||||
t1 ^= 0x55;
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user