[testsuite,applied] PR52641 Fix more fallout from sloppy tests.
Checks
Commit Message
Made some tests more generic so they can pass on more targets.
Johann
--
testsuite/52641: Fix fallout from sloppy tests.
gcc/testsuite/
PR testsuite/52641
* gcc.dg/torture/pr110838.c: Use proper shift offset to get MSB or int.
* gcc.dg/torture/pr112282.c: Use at least 32 bits for :20 bit-fields.
* gcc.dg/tree-ssa/bitcmp-5.c: Use integral type with 32 bits or more.
* gcc.dg/tree-ssa/bitcmp-6.c: Same.
* gcc.dg/tree-ssa/cltz-complement-max.c: Same.
* gcc.dg/tree-ssa/cltz-max.c: Same.
* gcc.dg/tree-ssa/if-to-switch-8.c: Use literals that fit int.
* gcc.dg/tree-ssa/if-to-switch-9.c [avr]: Set case-values-threshold=3.
* gcc.dg/tree-ssa/negneg-3.c: Discriminate [not] large_double.
* gcc.dg/tree-ssa/phi-opt-25b.c: Use types of correct widths for
__builtin_bswapN.
* gcc.dg/tree-ssa/pr55177-1.c: Same.
* gcc.dg/tree-ssa/popcount-max.c: Use int32_t where required.
* gcc.dg/tree-ssa/pr111583-1.c: Use intptr_t as needed.
* gcc.dg/tree-ssa/pr111583-2.c: Same.
Comments
On 1/7/24 08:53, Georg-Johann Lay wrote:
> Made some tests more generic so they can pass on more targets.
>
> Johann
>
> --
>
> testsuite/52641: Fix fallout from sloppy tests.
>
> gcc/testsuite/
> PR testsuite/52641
> * gcc.dg/torture/pr110838.c: Use proper shift offset to get MSB or
> int.
> * gcc.dg/torture/pr112282.c: Use at least 32 bits for :20 bit-fields.
> * gcc.dg/tree-ssa/bitcmp-5.c: Use integral type with 32 bits or more.
> * gcc.dg/tree-ssa/bitcmp-6.c: Same.
> * gcc.dg/tree-ssa/cltz-complement-max.c: Same.
> * gcc.dg/tree-ssa/cltz-max.c: Same.
> * gcc.dg/tree-ssa/if-to-switch-8.c: Use literals that fit int.
> * gcc.dg/tree-ssa/if-to-switch-9.c [avr]: Set case-values-threshold=3.
> * gcc.dg/tree-ssa/negneg-3.c: Discriminate [not] large_double.
> * gcc.dg/tree-ssa/phi-opt-25b.c: Use types of correct widths for
> __builtin_bswapN.
> * gcc.dg/tree-ssa/pr55177-1.c: Same.
> * gcc.dg/tree-ssa/popcount-max.c: Use int32_t where required.
> * gcc.dg/tree-ssa/pr111583-1.c: Use intptr_t as needed.
> * gcc.dg/tree-ssa/pr111583-2.c: Same.
Are you checking this on other targets? My tester just started
complaining about these (ft30-elf, fr30-elf), more expected as today's
run progresses)
> Tests that now fail, but worked before (2 tests):
>
> ft32-sim: gcc: gcc.dg/tree-ssa/phi-opt-25b.c (test for excess errors)
> ft32-sim: gcc: gcc.dg/tree-ssa/phi-opt-25b.c (test for excess errors)
Jeff
Am 07.01.24 um 17:45 schrieb Jeff Law:
>
>
> On 1/7/24 08:53, Georg-Johann Lay wrote:
>> Made some tests more generic so they can pass on more targets.
>>
>> Johann
>>
>> --
>>
>> testsuite/52641: Fix fallout from sloppy tests.
>>
>> gcc/testsuite/
>> PR testsuite/52641
>> * gcc.dg/torture/pr110838.c: Use proper shift offset to get MSB
>> or int.
>> * gcc.dg/torture/pr112282.c: Use at least 32 bits for :20
>> bit-fields.
>> * gcc.dg/tree-ssa/bitcmp-5.c: Use integral type with 32 bits or
>> more.
>> * gcc.dg/tree-ssa/bitcmp-6.c: Same.
>> * gcc.dg/tree-ssa/cltz-complement-max.c: Same.
>> * gcc.dg/tree-ssa/cltz-max.c: Same.
>> * gcc.dg/tree-ssa/if-to-switch-8.c: Use literals that fit int.
>> * gcc.dg/tree-ssa/if-to-switch-9.c [avr]: Set
>> case-values-threshold=3.
>> * gcc.dg/tree-ssa/negneg-3.c: Discriminate [not] large_double.
>> * gcc.dg/tree-ssa/phi-opt-25b.c: Use types of correct widths for
>> __builtin_bswapN.
>> * gcc.dg/tree-ssa/pr55177-1.c: Same.
>> * gcc.dg/tree-ssa/popcount-max.c: Use int32_t where required.
>> * gcc.dg/tree-ssa/pr111583-1.c: Use intptr_t as needed.
>> * gcc.dg/tree-ssa/pr111583-2.c: Same.
> Are you checking this on other targets? My tester just started
> complaining about these (ft30-elf, fr30-elf), more expected as today's
> run progresses)
>
>
>> Tests that now fail, but worked before (2 tests):
>>
>> ft32-sim: gcc: gcc.dg/tree-ssa/phi-opt-25b.c (test for excess errors)
>> ft32-sim: gcc: gcc.dg/tree-ssa/phi-opt-25b.c (test for excess errors)
>
> Jeff
Hi Jeff, thanks for fixing the typo.
It slipped through because "int short" works in that place.
Usually when going after PR52641 I used dg-require, dg-skip or
dg-xfail for tests that fail on 16-bit int etc.
The take above was more ambitious in that it tried to make some
tests work without breaking other platforms of course.
It's not always easy to get the intent of a test case and how
to make it more generic though.
Johann
On 1/7/24 10:17, Georg-Johann Lay wrote:
>
>
> Am 07.01.24 um 17:45 schrieb Jeff Law:
>>
>>
>> On 1/7/24 08:53, Georg-Johann Lay wrote:
>>> Made some tests more generic so they can pass on more targets.
>>>
>>> Johann
>>>
>>> --
>>>
>>> testsuite/52641: Fix fallout from sloppy tests.
>>>
>>> gcc/testsuite/
>>> PR testsuite/52641
>>> * gcc.dg/torture/pr110838.c: Use proper shift offset to get MSB
>>> or int.
>>> * gcc.dg/torture/pr112282.c: Use at least 32 bits for :20
>>> bit-fields.
>>> * gcc.dg/tree-ssa/bitcmp-5.c: Use integral type with 32 bits or
>>> more.
>>> * gcc.dg/tree-ssa/bitcmp-6.c: Same.
>>> * gcc.dg/tree-ssa/cltz-complement-max.c: Same.
>>> * gcc.dg/tree-ssa/cltz-max.c: Same.
>>> * gcc.dg/tree-ssa/if-to-switch-8.c: Use literals that fit int.
>>> * gcc.dg/tree-ssa/if-to-switch-9.c [avr]: Set
>>> case-values-threshold=3.
>>> * gcc.dg/tree-ssa/negneg-3.c: Discriminate [not] large_double.
>>> * gcc.dg/tree-ssa/phi-opt-25b.c: Use types of correct widths for
>>> __builtin_bswapN.
>>> * gcc.dg/tree-ssa/pr55177-1.c: Same.
>>> * gcc.dg/tree-ssa/popcount-max.c: Use int32_t where required.
>>> * gcc.dg/tree-ssa/pr111583-1.c: Use intptr_t as needed.
>>> * gcc.dg/tree-ssa/pr111583-2.c: Same.
>> Are you checking this on other targets? My tester just started
>> complaining about these (ft30-elf, fr30-elf), more expected as today's
>> run progresses)
>>
>>
>>> Tests that now fail, but worked before (2 tests):
>>>
>>> ft32-sim: gcc: gcc.dg/tree-ssa/phi-opt-25b.c (test for excess errors)
>>> ft32-sim: gcc: gcc.dg/tree-ssa/phi-opt-25b.c (test for excess errors)
>>
>> Jeff
>
> Hi Jeff, thanks for fixing the typo.
>
> It slipped through because "int short" works in that place.
>
> Usually when going after PR52641 I used dg-require, dg-skip or
> dg-xfail for tests that fail on 16-bit int etc.
Yea. We're not terribly good about keeping the testsuite 16bit clean.
Just not that much interest in such ports. Just to be clear -- I'm
happy to see the testsuite improved by reducing noise, even on these
lesser used platforms.
>
> The take above was more ambitious in that it tried to make some
> tests work without breaking other platforms of course.
ACK. It happens. Just a reminder to be careful. I've already fixed it
on the trunk.
>
> It's not always easy to get the intent of a test case and how
> to make it more generic though.
Absolutely true.
Thanks again,
jeff
@@ -5,10 +5,12 @@ typedef __UINT8_TYPE__ uint8_t;
typedef __INT8_TYPE__ int8_t;
typedef uint8_t pixel;
+#define MSB (__CHAR_BIT__ * __SIZEOF_INT__ - 1)
+
/* get the sign of input variable (TODO: this is a dup, make common) */
static inline int8_t signOf(int x)
{
- return (x >> 31) | ((int)((((uint32_t)-x)) >> 31));
+ return (x >> MSB) | ((int)((((uint32_t)-x)) >> MSB));
}
__attribute__((noipa))
@@ -1,5 +1,11 @@
/* { dg-do run } */
+#if __SIZEOF_INT__ < 4
+#define Xint __INT32_TYPE__
+#else
+#define Xint int
+#endif
+
int printf(const char *, ...);
void abort ();
/* We need an abort that isn't noreturn. */
@@ -10,8 +16,8 @@ void __attribute__((noipa)) my_abort ()
int a, g, h, i, v, w = 2, x, y, ab, ac, ad, ae, af, ag;
static int f, j, m, n, p, r, u, aa;
struct b {
- int c : 20;
- int d : 20;
+ Xint c : 20;
+ Xint d : 20;
int e : 10;
};
static struct b l, o, q = {3, 3, 5};
@@ -6,6 +6,9 @@
of `(a & b) CMP a` and `(a | b) CMP a`
which can be optimized to 1. */
+#if __SIZEOF_INT__ < 4
+#define int __INT32_TYPE__
+#endif
/* For `&`, the non-negativeness of b is not taken into account. */
int f_and_le(int len) {
@@ -6,6 +6,10 @@
of `(a & b) CMP a` and `(a | b) CMP a`
which can be optimized to 0. */
+#if __SIZEOF_INT__ < 4
+#define int __INT32_TYPE__
+#endif
+
/* For `&`, the non-negativeness of b is not taken into account. */
int f_and_gt(int len) {
len &= 0xfffff;
@@ -3,6 +3,10 @@
#define PREC (__CHAR_BIT__)
+#if __SIZEOF_INT__ < 4
+#define int __INT32_TYPE__
+#endif
+
int clz_complement_count1 (unsigned char b) {
int c = 0;
@@ -3,6 +3,10 @@
#define PREC (__CHAR_BIT__)
+#if __SIZEOF_INT__ < 4
+#define int __INT32_TYPE__
+#endif
+
int clz_count1 (unsigned char b) {
int c = 0;
@@ -20,7 +20,7 @@ int foo(int a, int b)
else if (a == 10)
global2 = 12345;
else if (a == 1)
- global2 = 123456;
+ global2 = 23456;
}
}
@@ -1,6 +1,7 @@
/* PR tree-optimization/88702 */
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-iftoswitch-optimized" } */
+/* { dg-additional-options "--param=case-values-threshold=3" { target { avr-*-* } } } */
int IsHTMLWhitespace(int aChar) {
return aChar == 0x0009 || aChar == 0x000A ||
@@ -12,4 +12,5 @@ DEF(0, unsigned, long long)
DEF(1, unsigned, unsigned long long)
DEF(2, double, float)
-/* { dg-final { scan-tree-dump-times "negate_expr" 6 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "negate_expr" 6 "optimized" { target { large_double } } } } */
+/* { dg-final { scan-tree-dump-times "negate_expr" 4 "optimized" { target { ! large_double } } } } */
@@ -5,17 +5,17 @@
/* Test to make sure unrelated arguments and comparisons
don't get optimized incorrectly. */
-unsigned short test_bswap16(unsigned short x, unsigned short y)
+__UINT16_TYPE__ short test_bswap16(__UINT16_TYPE__ x, __UINT16_TYPE__ y)
{
return x ? __builtin_bswap16(y) : 0;
}
-unsigned int test_bswap32(unsigned int x, unsigned int y)
+__UINT32_TYPE__ test_bswap32(__UINT32_TYPE__ x, __UINT32_TYPE__ y)
{
return x ? __builtin_bswap32(y) : 0;
}
-unsigned long long test_bswap64(unsigned long long x, unsigned long long y)
+__UINT64_TYPE__ test_bswap64(__UINT64_TYPE__ x, __UINT64_TYPE__ y)
{
return x ? __builtin_bswap64(y) : 0;
}
@@ -3,7 +3,7 @@
#define PREC (__CHAR_BIT__)
-int count1 (unsigned char b) {
+__INT32_TYPE__ count1 (unsigned char b) {
int c = 0;
while (b) {
@@ -16,7 +16,7 @@ int count1 (unsigned char b) {
return 34567;
}
-int count2 (unsigned char b) {
+__INT32_TYPE__ count2 (unsigned char b) {
int c = 0;
while (b) {
@@ -12,7 +12,7 @@ int main()
a = 1;
for (; a; a++) {
{
- long b = j, d = h;
+ __INTPTR_TYPE__ b = j, d = h;
int c = 0;
while (d--)
*(char *)b++ = c;
@@ -18,7 +18,7 @@ static short m(unsigned k) {
const unsigned short *n[65];
g = &n[4];
k || l();
- long a = k;
+ __INTPTR_TYPE__ a = k;
char i = 0;
unsigned long j = k;
while (j--)
@@ -1,10 +1,10 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
-extern int x;
+extern __INT32_TYPE__ x;
void foo(void)
{
- int a = __builtin_bswap32(x);
+ __INT32_TYPE__ a = __builtin_bswap32(x);
a &= 0x5a5b5c5d;
x = __builtin_bswap32(a);
}