gcc/
authorNaveen H.S <Naveen.Hurugalawadi@caviumnetworks.com>
Thu, 25 Apr 2013 12:21:13 +0000 (12:21 +0000)
committerNaveen H.S <naveenh@gcc.gnu.org>
Thu, 25 Apr 2013 12:21:13 +0000 (12:21 +0000)
2013-04-25  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>

* config/aarch64/aarch64.md
(*cmp_swp_<optab><ALLX:mode>_shft_<GPI:mode>): New pattern.

gcc/testsuite/

2013-04-25  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>

* gcc.target/aarch64/cmp.c: New.

From-SVN: r198303

gcc/ChangeLog
gcc/config/aarch64/aarch64.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/cmp.c [new file with mode: 0644]

index e281812f7facf412a39822dfc2e5473a4cab70d7..085124cea61c55852349f7404dc6d1af84de0099 100644 (file)
@@ -1,3 +1,8 @@
+2013-04-25  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
+
+       * config/aarch64/aarch64.md 
+       (*cmp_swp_<optab><ALLX:mode>_shft_<GPI:mode>): New pattern.
+
 2013-04-25  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
 
        * config/aarch64/aarch64.md (*ngc<mode>): New pattern.
index 3e1059142a1bc546ef824c5cb1fb6f586b5ecf78..2d83054f7a408c634df9a7ca64984bf7f105a467 100644 (file)
    (set_attr "mode" "<GPI:MODE>")]
 )
 
+(define_insn "*cmp_swp_<optab><ALLX:mode>_shft_<GPI:mode>"
+  [(set (reg:CC_SWP CC_REGNUM)
+       (compare:CC_SWP (ashift:GPI
+                        (ANY_EXTEND:GPI
+                         (match_operand:ALLX 0 "register_operand" "r"))
+                        (match_operand:QI 1 "aarch64_shift_imm_<mode>" "n"))
+       (match_operand:GPI 2 "register_operand" "r")))]
+  ""
+  "cmp\\t%<GPI:w>2, %<GPI:w>0, <su>xt<ALLX:size> %1"
+  [(set_attr "v8type" "alus_ext")
+   (set_attr "mode" "<GPI:MODE>")]
+)
 
 ;; -------------------------------------------------------------------
 ;; Store-flag and conditional select insns
index 035ea20ad3c7043bcad48ed59ba4a4bf04af6863..3de1dff99fded6fae3ade70973603556bbed1c5f 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-25  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
+
+       * gcc.target/aarch64/cmp.c: New.
+
 2013-04-25  Naveen H.S  <Naveen.Hurugalawadi@caviumnetworks.com>
 
        * gcc.target/aarch64/ngc.c: New.
diff --git a/gcc/testsuite/gcc.target/aarch64/cmp.c b/gcc/testsuite/gcc.target/aarch64/cmp.c
new file mode 100644 (file)
index 0000000..ee57dd2
--- /dev/null
@@ -0,0 +1,61 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int
+cmp_si_test1 (int a, int b, int c)
+{
+  if (a > b)
+    return a + c;
+  else
+    return a + b + c;
+}
+
+int
+cmp_si_test2 (int a, int b, int c)
+{
+  if ((a >> 3) > b)
+    return a + c;
+  else
+    return a + b + c;
+}
+
+typedef long long s64;
+
+s64
+cmp_di_test1 (s64 a, s64 b, s64 c)
+{
+  if (a > b)
+    return a + c;
+  else
+    return a + b + c;
+}
+
+s64
+cmp_di_test2 (s64 a, s64 b, s64 c)
+{
+  if ((a >> 3) > b)
+    return a + c;
+  else
+    return a + b + c;
+}
+
+int
+cmp_di_test3 (int a, s64 b, s64 c)
+{
+  if (a > b)
+    return a + c;
+  else
+    return a + b + c;
+}
+
+int
+cmp_di_test4 (int a, s64 b, s64 c)
+{
+  if (((s64)a << 3) > b)
+    return a + c;
+  else
+    return a + b + c;
+}
+
+/* { dg-final { scan-assembler-times "cmp\tw\[0-9\]+, w\[0-9\]+" 2 } } */
+/* { dg-final { scan-assembler-times "cmp\tx\[0-9\]+, x\[0-9\]+" 4 } } */