arm.md (arm_shiftsi3): New alternative l/l/M.
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Wed, 11 Sep 2013 11:14:39 +0000 (11:14 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Wed, 11 Sep 2013 11:14:39 +0000 (11:14 +0000)
[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

gcc/ChangeLog
gcc/config/arm/arm.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/thumb-ifcvt-2.c [new file with mode: 0644]

index 467377802bf613ad328ff239a22338d658ed731a..8b2e2bba301d95ae3eea6a77370f7589ea50de3f 100644 (file)
@@ -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,
index 8a482b570ec039aad888d7d7d902b48f7e453abc..0f958041d7c7408fd86f764ee333c02652ef4315 100644 (file)
 )
 
 (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"
index ae9e6e2af623d07a649a18aaf6bbebad8f52e3d4..718e5424a3fd42e0e09c426a62a1dfcb13482da4 100644 (file)
@@ -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 (file)
index 0000000..3da9ef0
--- /dev/null
@@ -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" } } */