diff mbox

[ARM] Tests for arm_restrict_it patterns in thumb2.md

Message ID 56B472A7.9040102@foss.arm.com
State New
Headers show

Commit Message

Kyrill Tkachov Feb. 5, 2016, 10 a.m. UTC
Hi all,

I've been auditing the patterns in the arm backend that were added/modified for -mrestrict-it
and I've come up with a few runtime tests that end up generating those patterns.
This patch contains 4 tests for 4 patterns that have paths specific to -mrestrict-it.

There were some patterns like thumb2_mov_negscc_strict_it and thumb2_mov_notscc_strict_it
that I could not generate at all, because the earlier RTL optimisers always generated some
equivalent but different (and at least as good) so these splitters never matched.
I think we could safely remove them, but not at this stage.

These tests should give us a bit more test coverage into the -mrestrict-it functionality.

Ok for trunk?

Thanks,
Kyrill

2016-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

     * gcc.target/arm/cond_sub_restrict_it.c: New test.
     * gcc.target/arm/condarith_restrict_it.c: Likewise.
     * gcc.target/arm/movcond_restrict_it.c: Likewise.
     * gcc.target/arm/negscc_restrict_it.c: Likewise.

Comments

Kyrill Tkachov Feb. 24, 2016, 2:10 p.m. UTC | #1
Ping.
https://gcc.gnu.org/ml/gcc-patches/2016-02/msg00396.html

Thanks,
Kyrill
On 05/02/16 10:00, Kyrill Tkachov wrote:
> Hi all,
>
> I've been auditing the patterns in the arm backend that were added/modified for -mrestrict-it
> and I've come up with a few runtime tests that end up generating those patterns.
> This patch contains 4 tests for 4 patterns that have paths specific to -mrestrict-it.
>
> There were some patterns like thumb2_mov_negscc_strict_it and thumb2_mov_notscc_strict_it
> that I could not generate at all, because the earlier RTL optimisers always generated some
> equivalent but different (and at least as good) so these splitters never matched.
> I think we could safely remove them, but not at this stage.
>
> These tests should give us a bit more test coverage into the -mrestrict-it functionality.
>
> Ok for trunk?
>
> Thanks,
> Kyrill
>
> 2016-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>
>     * gcc.target/arm/cond_sub_restrict_it.c: New test.
>     * gcc.target/arm/condarith_restrict_it.c: Likewise.
>     * gcc.target/arm/movcond_restrict_it.c: Likewise.
>     * gcc.target/arm/negscc_restrict_it.c: Likewise.
Ramana Radhakrishnan Feb. 24, 2016, 2:18 p.m. UTC | #2
On Fri, Feb 5, 2016 at 10:00 AM, Kyrill Tkachov
<kyrylo.tkachov@foss.arm.com> wrote:
> Hi all,
>
> I've been auditing the patterns in the arm backend that were added/modified
> for -mrestrict-it
> and I've come up with a few runtime tests that end up generating those
> patterns.
> This patch contains 4 tests for 4 patterns that have paths specific to
> -mrestrict-it.
>
> There were some patterns like thumb2_mov_negscc_strict_it and
> thumb2_mov_notscc_strict_it
> that I could not generate at all, because the earlier RTL optimisers always
> generated some
> equivalent but different (and at least as good) so these splitters never
> matched.
> I think we could safely remove them, but not at this stage.
>
> These tests should give us a bit more test coverage into the -mrestrict-it
> functionality.
>
> Ok for trunk?

OK - thanks for the audit.

Ramana
>
> Thanks,
> Kyrill
>
> 2016-02-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>
>     * gcc.target/arm/cond_sub_restrict_it.c: New test.
>     * gcc.target/arm/condarith_restrict_it.c: Likewise.
>     * gcc.target/arm/movcond_restrict_it.c: Likewise.
>     * gcc.target/arm/negscc_restrict_it.c: Likewise.
diff mbox

Patch

diff --git a/gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c b/gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c
new file mode 100644
index 0000000000000000000000000000000000000000..8411643e95782876b71b3beccc699a2e85022e5c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/cond_sub_restrict_it.c
@@ -0,0 +1,26 @@ 
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O -mrestrict-it" }  */
+
+int a;
+
+__attribute__((noinline, noclone)) int
+fn1 (int c, int d)
+{
+  a -= c == d;
+  return a;
+}
+
+int
+main (void)
+{
+  a = 10;
+  if (fn1 (4, 4) != 9)
+    __builtin_abort ();
+
+  a = 5;
+  if (fn1 (3, 4) != 5)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/condarith_restrict_it.c b/gcc/testsuite/gcc.target/arm/condarith_restrict_it.c
new file mode 100644
index 0000000000000000000000000000000000000000..ad0d15b0ebdb09988fa7ca11abb1e096edf3bcf1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/condarith_restrict_it.c
@@ -0,0 +1,47 @@ 
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O2 -mrestrict-it" }  */
+
+__attribute__ ((noinline, noclone)) void
+fn2 ()
+{
+  __builtin_printf ("4");
+}
+
+enum
+{
+  ONE = 1,
+  TWO
+} a;
+
+int b;
+
+__attribute__ ((noinline, noclone)) int
+fn1 ()
+{
+  int c = b == 0;
+  if (a <= ONE)
+    if (b == 0)
+      fn2 ();
+  if (a)
+    if (c)
+      a = 0;
+
+  return a;
+}
+
+int
+main (void)
+{
+  a = ONE;
+  b = 1;
+  if (fn1 () != ONE)
+    __builtin_abort ();
+
+  a = TWO;
+  b = 0;
+  if (fn1 () != 0)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/movcond_restrict_it.c b/gcc/testsuite/gcc.target/arm/movcond_restrict_it.c
new file mode 100644
index 0000000000000000000000000000000000000000..f1f9cfa351bb8c2732c3dced30d8bc17f0aa573d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/movcond_restrict_it.c
@@ -0,0 +1,27 @@ 
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O3 -mrestrict-it" }  */
+
+int a;
+
+__attribute__ ((noinline, noclone)) int
+fn1 (int c, int d)
+{
+  if (c > d)
+    a = 1;
+  else
+    a = -1;
+  return a;
+}
+
+int
+main (void)
+{
+  if (fn1 (4, 5) != -1)
+    __builtin_abort ();
+
+  if (fn1 (5, 4) != 1)
+    __builtin_abort ();
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/negscc_restrict_it.c b/gcc/testsuite/gcc.target/arm/negscc_restrict_it.c
new file mode 100644
index 0000000000000000000000000000000000000000..b24c6ece7271dc4cfbb718155841282ff8f63bf7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/negscc_restrict_it.c
@@ -0,0 +1,19 @@ 
+/* { dg-do run } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-mthumb -O2 -mrestrict-it" }  */
+
+__attribute__ ((noinline, noclone)) int
+fn1 (int a, int b)
+{
+  return (a == b ? 0 : -1);
+}
+
+int
+main (void)
+{
+  if (fn1 (3, 3) != 0)
+    __builtin_abort ();
+
+  if (fn1 (6, 7) != -1)
+    __builtin_abort ();
+}