This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH][AArch64][testsuite] Adjust some arith+compare tests for potentially more aggressive if-conversion
- From: Kyrill Tkachov <kyrylo dot tkachov at arm dot com>
- To: James Greenhalgh <james dot greenhalgh at arm dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Marcus Shawcroft <Marcus dot Shawcroft at arm dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>
- Date: Mon, 13 Jul 2015 11:20:40 +0100
- Subject: Re: [PATCH][AArch64][testsuite] Adjust some arith+compare tests for potentially more aggressive if-conversion
- Authentication-results: sourceware.org; auth=none
- References: <559FB8B1 dot 4030905 at arm dot com> <20150710202119 dot GA942 at arm dot com>
On 10/07/15 21:21, James Greenhalgh wrote:
On Fri, Jul 10, 2015 at 01:21:05PM +0100, Kyrill Tkachov wrote:
Hi all,
Some of the testcases in aarch64.exp can fail their scan-assembler patterns
if if-conversion becomes more aggressive.
This patch adjusts the testcases in case the branches are eliminated and
further optimisations occur that may remove the scan-assembler patterns.
With this patch the patterns are always generated and the expected execute
values are updated.
Tests still pass on aarch64.
Ok for trunk?
This is OK. Please address my one comment below (looks like you left some
#if 0 kicking around in adds1.c) and fix the ChangeLog to include the
gcc.target/aarch64/adds1.c changes.
Thanks for spotting that, I'm attaching the patch I committed with r225732
and the below ChangeLog entry.
2015-07-13 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/aarch64/adds3.c: Adjust for more aggressive
if-conversion..
* gcc.target/aarch64/adds1.c: Likewise.
* gcc.target/aarch64/ands_1.c: Likewise.
* gcc.target/aarch64/bics_1.c: Likewise.
* gcc.target/aarch64/subs1.c: Likewise.
* gcc.target/aarch64/subs3.c: Likewise.
Thanks,
Kyrill
Thanks,
James
Index: gcc/testsuite/gcc.target/aarch64/ands_1.c
===================================================================
--- gcc/testsuite/gcc.target/aarch64/ands_1.c (revision 225731)
+++ gcc/testsuite/gcc.target/aarch64/ands_1.c (working copy)
@@ -12,7 +12,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -24,7 +24,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -36,7 +36,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
typedef long long s64;
@@ -50,7 +50,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -62,7 +62,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -74,7 +74,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -84,7 +84,7 @@
s64 y;
x = ands_si_test1 (29, 4, 5);
- if (x != 13)
+ if (x != (29 & 4))
abort ();
x = ands_si_test1 (5, 2, 20);
@@ -92,7 +92,7 @@
abort ();
x = ands_si_test2 (29, 4, 5);
- if (x != 38)
+ if (x != (29 & 0xff))
abort ();
x = ands_si_test2 (1024, 2, 20);
@@ -100,7 +100,7 @@
abort ();
x = ands_si_test3 (35, 4, 5);
- if (x != 41)
+ if (x != (35 & (4 << 3)))
abort ();
x = ands_si_test3 (5, 2, 20);
@@ -111,7 +111,7 @@
0x320000004ll,
0x505050505ll);
- if (y != ((0x130000029ll & 0x320000004ll) + 0x320000004ll + 0x505050505ll))
+ if (y != ((0x130000029ll & 0x320000004ll)))
abort ();
y = ands_di_test1 (0x5000500050005ll,
@@ -123,7 +123,7 @@
y = ands_di_test2 (0x130000029ll,
0x320000004ll,
0x505050505ll);
- if (y != ((0x130000029ll & 0xff) + 0x320000004ll + 0x505050505ll))
+ if (y != ((0x130000029ll & 0xff)))
abort ();
y = ands_di_test2 (0x130002900ll,
@@ -135,8 +135,7 @@
y = ands_di_test3 (0x130000029ll,
0x064000008ll,
0x505050505ll);
- if (y != ((0x130000029ll & (0x064000008ll << 3))
- + 0x064000008ll + 0x505050505ll))
+ if (y != ((0x130000029ll & (0x064000008ll << 3))))
abort ();
y = ands_di_test3 (0x130002900ll,
Index: gcc/testsuite/gcc.target/aarch64/subs3.c
===================================================================
--- gcc/testsuite/gcc.target/aarch64/subs3.c (revision 225731)
+++ gcc/testsuite/gcc.target/aarch64/subs3.c (working copy)
@@ -12,7 +12,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -23,7 +23,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int main ()
@@ -32,27 +32,27 @@
s64 y;
x = subs_ext (0x13000002ll, 41, 15);
- if (x != 318767121)
+ if (x != (int)(0x13000002ll - 41))
abort ();
- x = subs_ext (0x50505050ll, 29, 4);
- if (x != 1347440724)
+ x = subs_ext (0x50505050ll, 0x50505050ll, 4);
+ if (x != (int)(0x50505050ll + 4))
abort ();
x = subs_ext (0x12121212121ll, 2, 14);
- if (x != 555819311)
+ if (x != (int)(0x12121212121ll - 2))
abort ();
x = subs_shift_ext (0x123456789ll, 4, 12);
- if (x != 591751033)
+ if (x != (int)(0x123456789ll - (4 << 3)))
abort ();
- x = subs_shift_ext (0x02020202ll, 9, 8);
- if (x != 33685963)
+ x = subs_shift_ext (0x02020202ll << 3, 0x02020202ll, 8);
+ if (x != (int)(8 + (0x02020202ll << 3)))
abort ();
x = subs_shift_ext (0x987987987987ll, 23, 41);
- if (x != -2020050673)
+ if (x != (int)(0x987987987987ll - (23 << 3)))
abort ();
return 0;
Index: gcc/testsuite/gcc.target/aarch64/adds1.c
===================================================================
--- gcc/testsuite/gcc.target/aarch64/adds1.c (revision 225731)
+++ gcc/testsuite/gcc.target/aarch64/adds1.c (working copy)
@@ -12,7 +12,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -24,7 +24,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -36,7 +36,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
typedef long long s64;
@@ -50,7 +50,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -62,7 +62,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -74,7 +74,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int main ()
@@ -83,64 +83,64 @@
s64 y;
x = adds_si_test1 (29, 4, 5);
- if (x != 42)
+ if (x != (29 + 4))
abort ();
- x = adds_si_test1 (5, 2, 20);
- if (x != 29)
+ x = adds_si_test1 (5, 2, -5);
+ if (x != 7)
abort ();
x = adds_si_test2 (29, 4, 5);
- if (x != 293)
+ if (x != (29 + 0xff))
abort ();
- x = adds_si_test2 (1024, 2, 20);
- if (x != 1301)
+ x = adds_si_test2 (-255, 2, 20);
+ if (x != -235)
abort ();
x = adds_si_test3 (35, 4, 5);
- if (x != 76)
+ if (x != (35 + (4 << 3)))
abort ();
- x = adds_si_test3 (5, 2, 20);
- if (x != 43)
+ x = adds_si_test3 (-(2 << 3), 2, 20);
+ if (x != (20 - (2 << 3)))
abort ();
y = adds_di_test1 (0x130000029ll,
0x320000004ll,
0x505050505ll);
- if (y != 0xc75050536)
+ if (y != (0x130000029ll + 0x320000004ll))
abort ();
y = adds_di_test1 (0x5000500050005ll,
- 0x2111211121112ll,
+ -0x5000500050005ll,
0x0000000002020ll);
- if (y != 0x9222922294249)
+ if (y != (0x5000500050005ll + 0x0000000002020ll))
abort ();
y = adds_di_test2 (0x130000029ll,
0x320000004ll,
0x505050505ll);
- if (y != 0x955050631)
+ if (y != (0x130000029ll + 0xff))
abort ();
- y = adds_di_test2 (0x130002900ll,
+ y = adds_di_test2 (-0xff,
0x320000004ll,
0x505050505ll);
- if (y != 0x955052f08)
+ if (y != (0x505050505ll - 0xff))
abort ();
y = adds_di_test3 (0x130000029ll,
0x064000008ll,
0x505050505ll);
- if (y != 0x9b9050576)
+ if (y != (0x130000029ll + (0x064000008ll << 3)))
abort ();
y = adds_di_test3 (0x130002900ll,
- 0x088000008ll,
+ -(0x130002900ll >> 3),
0x505050505ll);
- if (y != 0xafd052e4d)
+ if (y != (0x130002900ll + 0x505050505ll))
abort ();
return 0;
Index: gcc/testsuite/gcc.target/aarch64/bics_1.c
===================================================================
--- gcc/testsuite/gcc.target/aarch64/bics_1.c (revision 225731)
+++ gcc/testsuite/gcc.target/aarch64/bics_1.c (working copy)
@@ -12,7 +12,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -24,7 +24,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
typedef long long s64;
@@ -38,7 +38,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -50,7 +50,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -60,7 +60,7 @@
s64 y;
x = bics_si_test1 (29, ~4, 5);
- if (x != ((29 & 4) + ~4 + 5))
+ if (x != (29 & 4))
abort ();
x = bics_si_test1 (5, ~2, 20);
@@ -68,7 +68,7 @@
abort ();
x = bics_si_test2 (35, ~4, 5);
- if (x != ((35 & ~(~4 << 3)) + ~4 + 5))
+ if (x != (35 & ~(~4 << 3)))
abort ();
x = bics_si_test2 (96, ~2, 20);
@@ -79,7 +79,7 @@
~0x320000004ll,
0x505050505ll);
- if (y != ((0x130000029ll & 0x320000004ll) + ~0x320000004ll + 0x505050505ll))
+ if (y != (0x130000029ll & 0x320000004ll))
abort ();
y = bics_di_test1 (0x5000500050005ll,
@@ -91,8 +91,7 @@
y = bics_di_test2 (0x130000029ll,
~0x064000008ll,
0x505050505ll);
- if (y != ((0x130000029ll & ~(~0x064000008ll << 3))
- + ~0x064000008ll + 0x505050505ll))
+ if (y != (0x130000029ll & ~(~0x064000008ll << 3)))
abort ();
y = bics_di_test2 (0x130002900ll,
@@ -103,4 +102,3 @@
return 0;
}
-
Index: gcc/testsuite/gcc.target/aarch64/adds3.c
===================================================================
--- gcc/testsuite/gcc.target/aarch64/adds3.c (revision 225731)
+++ gcc/testsuite/gcc.target/aarch64/adds3.c (working copy)
@@ -12,7 +12,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -23,7 +23,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int main ()
@@ -32,27 +32,27 @@
s64 y;
x = adds_ext (0x13000002ll, 41, 15);
- if (x != 318767203)
+ if (x != (int)(0x13000002ll + 41))
abort ();
- x = adds_ext (0x50505050ll, 29, 4);
- if (x != 1347440782)
+ x = adds_ext (0x50505050ll, -0x50505050ll, 4);
+ if (x != (int)(0x50505050ll + 4))
abort ();
x = adds_ext (0x12121212121ll, 2, 14);
- if (x != 555819315)
+ if (x != (int)(0x12121212121ll + 2))
abort ();
x = adds_shift_ext (0x123456789ll, 4, 12);
- if (x != 591751097)
+ if (x != (int)(0x123456789ll + (4 << 3)))
abort ();
- x = adds_shift_ext (0x02020202ll, 9, 8);
- if (x != 33686107)
+ x = adds_shift_ext (-(0x02020202ll << 3), 0x02020202ll, 8);
+ if (x != (int)(8 - (0x02020202ll << 3)))
abort ();
x = adds_shift_ext (0x987987987987ll, 23, 41);
- if (x != -2020050305)
+ if (x != (int)(0x987987987987ll + (23 << 3)))
abort ();
return 0;
Index: gcc/testsuite/gcc.target/aarch64/subs1.c
===================================================================
--- gcc/testsuite/gcc.target/aarch64/subs1.c (revision 225731)
+++ gcc/testsuite/gcc.target/aarch64/subs1.c (working copy)
@@ -12,7 +12,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -24,7 +24,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int
@@ -36,7 +36,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
typedef long long s64;
@@ -50,7 +50,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -62,7 +62,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
s64
@@ -74,7 +74,7 @@
if (d == 0)
return a + c;
else
- return b + d + c;
+ return d;
}
int main ()
@@ -83,64 +83,64 @@
s64 y;
x = subs_si_test1 (29, 4, 5);
- if (x != 33)
+ if (x != 24)
abort ();
- x = subs_si_test1 (5, 2, 20);
- if (x != 7)
+ x = subs_si_test1 (20, 2, 20);
+ if (x != 40)
abort ();
- x = subs_si_test2 (29, 4, 5);
- if (x != -217)
- abort ();
+ x = subs_si_test2 (0xff, 4, 5);
+ if (x != (0xff + 5))
+ abort ();
- x = subs_si_test2 (1024, 2, 20);
- if (x != 791)
- abort ();
+ x = subs_si_test2 (1024, 2, 20);
+ if (x != (1024 - 0xff))
+ abort ();
x = subs_si_test3 (35, 4, 5);
- if (x != 12)
+ if (x != 35 - (4 << 3))
abort ();
- x = subs_si_test3 (5, 2, 20);
- if (x != 11)
+ x = subs_si_test3 (5 << 3, 5, 20);
+ if (x != (20 + (5 << 3)))
abort ();
y = subs_di_test1 (0x130000029ll,
0x320000004ll,
0x505050505ll);
- if (y != 0x45000002d)
+ if (y != (0x130000029ll - 0x505050505ll))
abort ();
y = subs_di_test1 (0x5000500050005ll,
0x2111211121112ll,
- 0x0000000002020ll);
- if (y != 0x7111711171117)
+ 0x5000500050005ll);
+ if (y != (0x5000500050005ll + 0x5000500050005ll))
abort ();
y = subs_di_test2 (0x130000029ll,
0x320000004ll,
0x505050505ll);
- if (y != 0x955050433)
+ if (y != (0x130000029ll - 0xff))
abort ();
- y = subs_di_test2 (0x130002900ll,
+ y = subs_di_test2 (0xff,
0x320000004ll,
0x505050505ll);
- if (y != 0x955052d0a)
+ if (y != (0xff + 0x505050505ll))
abort ();
y = subs_di_test3 (0x130000029ll,
0x064000008ll,
0x505050505ll);
- if (y != 0x3790504f6)
+ if (y != (0x130000029ll - (0x064000008ll << 3)))
abort ();
- y = subs_di_test3 (0x130002900ll,
- 0x088000008ll,
+ y = subs_di_test3 (0x130002900ll << 3,
+ 0x130002900ll,
0x505050505ll);
- if (y != 0x27d052dcd)
+ if (y != (0x505050505ll + (0x130002900ll << 3)))
abort ();
return 0;
Index: gcc/testsuite/ChangeLog
===================================================================
--- gcc/testsuite/ChangeLog (revision 225731)
+++ gcc/testsuite/ChangeLog (working copy)
@@ -1,3 +1,13 @@
+2015-07-13 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * gcc.target/aarch64/adds3.c: Adjust for more aggressive
+ if-conversion..
+ * gcc.target/aarch64/adds1.c: Likewise.
+ * gcc.target/aarch64/ands_1.c: Likewise.
+ * gcc.target/aarch64/bics_1.c: Likewise.
+ * gcc.target/aarch64/subs1.c: Likewise.
+ * gcc.target/aarch64/subs3.c: Likewise.
+
2015-07-13 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/64589