| /* PR target/57819 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -mtune=core2" } */ |
| |
| void foo (void); |
| |
| __extension__ typedef __INTPTR_TYPE__ intptr_t; |
| |
| int |
| test1 (intptr_t x, intptr_t n) |
| { |
| n &= sizeof (intptr_t) * __CHAR_BIT__ - 1; |
| |
| if (x & ((intptr_t) 1 << n)) |
| foo (); |
| |
| return 0; |
| } |
| |
| int |
| test2 (intptr_t x, intptr_t n) |
| { |
| if (x & ((intptr_t) 1 << ((int) n & (sizeof (intptr_t) * __CHAR_BIT__ - 1)))) |
| foo (); |
| |
| return 0; |
| } |
| |
| int |
| test3 (intptr_t x, intptr_t n) |
| { |
| if (x & ((intptr_t) 1 << ((int) n & ((int) sizeof (intptr_t) * __CHAR_BIT__ - 1)))) |
| foo (); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-assembler-not "and\[lq\]\[ \t\]" } } */ |