diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2013-09-11 11:14:39 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2013-09-11 11:14:39 +0000 |
commit | df45c0cc8ddd4c277311cf2b0267c032a74faa01 (patch) | |
tree | cb1b659cd2338313f97d86191ef43c8c17356694 /gcc | |
parent | 80ab0b1946ca391965043bce5b4e58ed004a99e8 (diff) | |
download | gcc-df45c0cc8ddd4c277311cf2b0267c032a74faa01.zip gcc-df45c0cc8ddd4c277311cf2b0267c032a74faa01.tar.gz gcc-df45c0cc8ddd4c277311cf2b0267c032a74faa01.tar.bz2 |
arm.md (arm_shiftsi3): New alternative l/l/M.
[gcc/]
* config/arm/arm.md (arm_shiftsi3): New alternative l/l/M.
[gcc/testsuite]
* gcc.target/arm/thumb-ifcvt-2.c: New test.
From-SVN: r202493
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/thumb-ifcvt-2.c | 18 |
4 files changed, 32 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4673778..8b2e2bb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * config/arm/arm.md (arm_shiftsi3): New alternative l/l/M. + 2013-09-11 Richard Biener <rguenther@suse.de> * tree-data-ref.c (dump_rdg_vertex, debug_rdg_vertex, diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 8a482b5..0f95804 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -4169,18 +4169,18 @@ ) (define_insn "*arm_shiftsi3" - [(set (match_operand:SI 0 "s_register_operand" "=l,r,r") + [(set (match_operand:SI 0 "s_register_operand" "=l,l,r,r") (match_operator:SI 3 "shift_operator" - [(match_operand:SI 1 "s_register_operand" "0,r,r") - (match_operand:SI 2 "reg_or_int_operand" "l,M,r")]))] + [(match_operand:SI 1 "s_register_operand" "0,l,r,r") + (match_operand:SI 2 "reg_or_int_operand" "l,M,M,r")]))] "TARGET_32BIT" "* return arm_output_shift(operands, 0);" [(set_attr "predicable" "yes") - (set_attr "arch" "t2,*,*") - (set_attr "predicable_short_it" "yes,no,no") + (set_attr "arch" "t2,t2,*,*") + (set_attr "predicable_short_it" "yes,yes,no,no") (set_attr "length" "4") (set_attr "shift" "1") - (set_attr "type" "alu_shift_reg,alu_shift_imm,alu_shift_reg")] + (set_attr "type" "alu_shift_reg,alu_shift_imm,alu_shift_imm,alu_shift_reg")] ) (define_insn "*shiftsi3_compare" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae9e6e2..718e542 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-09-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * gcc.target/arm/thumb-ifcvt-2.c: New test. + 2013-09-10 Jeff Law <law@redhat.com> * g++.dg/torture/pr58380.C: New test. diff --git a/gcc/testsuite/gcc.target/arm/thumb-ifcvt-2.c b/gcc/testsuite/gcc.target/arm/thumb-ifcvt-2.c new file mode 100644 index 0000000..3da9ef0 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/thumb-ifcvt-2.c @@ -0,0 +1,18 @@ +/* Check that Thumb 16-bit shifts by immediate can be if-converted. */ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-options "-O2 -mthumb" } */ + +int +foo (int a, int b) +{ + if (a != b) + a = a << 1; + else + a = a >> 1; + + return a + b; +} + +/* { dg-final { scan-assembler "lslne" } } */ +/* { dg-final { scan-assembler "asreq" } } */ |