This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][AArch64][testsuite] PR target/70004: Remove check using undefined behaviour
- From: Kyrill Tkachov <kyrylo dot tkachov at foss dot arm dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Marcus Shawcroft <marcus dot shawcroft at arm dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>, James Greenhalgh <james dot greenhalgh at arm dot com>
- Date: Tue, 01 Mar 2016 14:29:19 +0000
- Subject: [PATCH][AArch64][testsuite] PR target/70004: Remove check using undefined behaviour
- Authentication-results: sourceware.org; auth=none
Hi all,
This test was reported as starting to fail a scan-assembler check with -mtune=thunderx.
The compiler decided to move the result back into the integer registers and perform the shift there
rather than do it on the SIMD side.
However, the C code is undefined because the shift is wider than the type. GCC even warns for it, but the
test catches it with dg-warning.
I don't think it's correct for the test to rely on undefined code, so the simplest thing to do is to delete
the undefined code.
Ok for trunk?
Thanks,
Kyrill
2016-03-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/70004
* gcc.target/aarch64/scalar_shift_1.c: (test_corners_sisd_di):
Delete.
(test_corners_sisd_si): Likewise.
(main): Remove checks of the above.
diff --git a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
index 8465c896705dbfd4c76b0815511ea7b4b034e095..7be1b12a75bf9f201644aef471c5edb99979c0c5 100644
--- a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c
@@ -181,34 +181,6 @@ test_ashift_right_int_si (Int32x1 b, Int32x1 c)
/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */
/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */
-Int64x1
-test_corners_sisd_di (Int64x1 b)
-{
- force_simd_di (b);
- b = b >> 63;
- force_simd_di (b);
- b = b >> 0;
- b += b >> 65; /* { dg-warning "right shift count >= width of type" } */
-
- return b;
-}
-/* { dg-final { scan-assembler "sshr\td\[0-9\]+,\ d\[0-9\]+,\ 63" } } */
-
-Int32x1
-test_corners_sisd_si (Int32x1 b)
-{
- force_simd_si (b);
- b = b >> 31;
- force_simd_si (b);
- b = b >> 0;
- b += b >> 33; /* { dg-warning "right shift count >= width of type" } */
-
- return b;
-}
-/* { dg-final { scan-assembler "sshr\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 31" } } */
-
-
-
#define CHECK(var,val) \
do \
{ \
@@ -236,8 +208,6 @@ main ()
CHECK (x, 0xffffffff21524110ull);
x = test_ashift_right_sisd_di (x, 8);
CHECK (x, 0xffffffffffff2152ull);
- x = test_corners_sisd_di (x);
- CHECK (x, 0xfffffffffffffffeull);
y = test_lshift_left_sisd_si (y, 4);
CHECK (y, 0xadbeef00);
@@ -252,8 +222,6 @@ main ()
CHECK (y, 0xffff5241);
y = test_ashift_right_sisd_si (y, 4);
CHECK (y, 0xffffff52);
- y = test_corners_sisd_si (y);
- CHECK (y, 0xfffffffe);
return 0;
}