Use conditional internal functions in if-conversion
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / ashltidisi.c
blob293a0f2563b77ddc4fdebf2a6b9967f20f0966b9
1 /* { dg-do run } */
2 /* { dg-options "-O2 -save-temps" } */
4 extern void abort (void);
6 #define GEN_TEST_CASE(x, y, z)\
7 __uint128_t __attribute__ ((noinline))\
8 ushift_##x##_##z (unsigned y data)\
9 {\
10 return (__uint128_t) data << x;\
12 __int128_t __attribute__ ((noinline)) \
13 shift_##x##_##z (y data) \
15 return (__int128_t) data << x;\
18 GEN_TEST_CASE (53, int, i)
19 GEN_TEST_CASE (3, long long, ll)
20 GEN_TEST_CASE (13, long long, ll)
21 GEN_TEST_CASE (53, long long, ll)
23 int
24 main (int argc, char **argv)
27 #define SHIFT_CHECK(x, y, z, p) \
28 if (ushift_##y##_##p (x)\
29 != ((__uint128_t) (unsigned z) x << y)) \
30 abort ();\
31 if (shift_##y##_##p (x)\
32 != ((__uint128_t) (signed z) x << y)) \
33 abort ();
35 SHIFT_CHECK (0x12345678, 53, int, i)
36 SHIFT_CHECK (0xcafecafe, 53, int, i)
38 SHIFT_CHECK (0x1234567890abcdefLL, 3, long long, ll)
39 SHIFT_CHECK (0x1234567890abcdefLL, 13, long long, ll)
40 SHIFT_CHECK (0x1234567890abcdefLL, 53, long long, ll)
41 SHIFT_CHECK (0xcafecafedeaddeadLL, 3, long long, ll)
42 SHIFT_CHECK (0xcafecafedeaddeadLL, 13, long long, ll)
43 SHIFT_CHECK (0xcafecafedeaddeadLL, 53, long long, ll)
45 return 0;
48 /* { dg-final { scan-assembler-times "asr" 4 } } */
49 /* { dg-final { scan-assembler-not "extr\t" } } */