blob: 83ae7edb9639284a5aac27f6b7ece7cd31f2b899 [file] [log] [blame]
/* PR target/93141 */
/* { dg-do compile } */
/* { dg-options "-O2 -masm=att" } */
/* { dg-final { scan-assembler-not "cmp\[lq]\t" } } */
/* { dg-final { scan-assembler-not "adc\[lq]\t" } } */
/* { dg-final { scan-assembler-times "seto\t%" 7 } } */
/* { dg-final { scan-assembler-times "sbb\[lq]\t" 5 } } */
#ifdef __x86_64__
typedef unsigned __int128 U;
typedef unsigned long long HU;
typedef signed __int128 S;
#else
typedef unsigned long long U;
typedef signed int HU;
typedef signed long long S;
#endif
int o;
S
qux (S x, S y)
{
S z;
o = __builtin_sub_overflow (x, y, &z);
return z;
}
S
quux (S x)
{
S z;
o = __builtin_sub_overflow (x, ((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2), &z);
return z;
}
S
corge (S x)
{
S z;
o = __builtin_sub_overflow (x, (((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2))
| (S) 0xbeedead, &z);
return z;
}
S
grault (S x)
{
S z;
o = __builtin_sub_overflow (x, -((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2), &z);
return z;
}
S
garply (S x)
{
S z;
o = __builtin_sub_overflow (x, (-(((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2)))
| (S) 0xbeedead, &z);
return z;
}
S
waldo (S x)
{
S z;
o = __builtin_sub_overflow (x, (S) ((((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2))
| -(HU) 0xbeedead), &z);
return z;
}
S
fred (S x)
{
S z;
o = __builtin_sub_overflow (x, (S) ((-(((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2)))
| -(HU) 0xbeedead), &z);
return z;
}