1 /* PR target/78057 */ 2 /* { dg-do compile } */ 3 /* { dg-options "-O2 -mbmi -mlzcnt -fdump-tree-optimized" } */ 4 5 extern void link_error (void); 6 7 int foo(int x)8foo (int x) 9 { 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 24 ) 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 35 ; 36 } 37 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 } } } */ 43