| /* { dg-do run } */ |
| /* { dg-require-effective-target ctz } */ |
| /* { dg-options "-O2 -fno-tree-ch -fdump-tree-optimized" } */ |
| |
| #define PREC (__CHAR_BIT__ * __SIZEOF_INT__) |
| |
| int |
| __attribute__ ((noinline, noclone)) |
| foo (unsigned int b) { |
| int c = 0; |
| |
| if (b == 0) |
| return PREC; |
| |
| while (!(b & 1)) { |
| b >>= 1; |
| c++; |
| } |
| |
| return c; |
| } |
| |
| int main() |
| { |
| if (foo(0) != PREC) |
| __builtin_abort (); |
| if (foo(1 << (PREC - 1)) != PREC - 1) |
| __builtin_abort (); |
| if (foo(96) != 5) |
| __builtin_abort (); |
| if (foo(35) != 0) |
| __builtin_abort (); |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "__builtin_ctz|\\.CTZ" 1 "optimized" } } */ |