PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / pr78057.c
blob493a53332bb1b96df66d70f3c5144597aa79fd40
1 /* PR target/78057 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -mbmi -mlzcnt -fdump-tree-optimized" } */
5 extern void link_error (void);
7 int
8 foo (int x)
10 if (__builtin_ia32_tzcnt_u16 (16) != 4
11 || __builtin_ia32_tzcnt_u16 (0) != 16
12 || __builtin_ia32_lzcnt_u16 (0x1ff) != 7
13 || __builtin_ia32_lzcnt_u16 (0) != 16
14 || __builtin_ia32_tzcnt_u32 (8) != 3
15 || __builtin_ia32_tzcnt_u32 (0) != 32
16 || __builtin_ia32_lzcnt_u32 (0x3fffffff) != 2
17 || __builtin_ia32_lzcnt_u32 (0) != 32
18 #ifdef __x86_64__
19 || __builtin_ia32_tzcnt_u64 (4) != 2
20 || __builtin_ia32_tzcnt_u64 (0) != 64
21 || __builtin_ia32_lzcnt_u64 (0x1fffffff) != 35
22 || __builtin_ia32_lzcnt_u64 (0) != 64
23 #endif
25 link_error ();
26 x += 2;
27 if (x == 0)
28 return 5;
29 return __builtin_ia32_tzcnt_u32 (x)
30 + __builtin_ia32_lzcnt_u32 (x)
31 #ifdef __x86_64__
32 + __builtin_ia32_tzcnt_u64 (x)
33 + __builtin_ia32_lzcnt_u64 (x)
34 #endif
38 /* { dg-final { scan-tree-dump-not "link_error" "optimized" } } */
39 /* { dg-final { scan-tree-dump-not "__builtin_ia32_\[lt]zcnt" "optimized" } } */
40 /* { dg-final { scan-tree-dump-times "__builtin_ctz " 1 "optimized" } } */
41 /* { dg-final { scan-tree-dump-times "__builtin_clz " 1 "optimized" } } */
42 /* { dg-final { scan-tree-dump-times "__builtin_ctzll " 1 "optimized" { target lp64 } } } */