| /* PR tree-optimization/81396 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-optimized" } */ |
| |
| typedef unsigned long long uint64_t; |
| |
| uint64_t |
| foo (uint64_t word) |
| { |
| #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG_LONG__ == 8 |
| const unsigned char *const ptr = (const unsigned char *) &word; |
| return ((uint64_t) ptr[0] |
| | ((uint64_t) ptr[1] << 8) |
| | ((uint64_t) ptr[2] << (8 * 2)) |
| | ((uint64_t) ptr[3] << (8 * 3)) |
| | ((uint64_t) ptr[4] << (8 * 4)) |
| | ((uint64_t) ptr[5] << (8 * 5)) |
| | ((uint64_t) ptr[6] << (8 * 6)) |
| | ((uint64_t) ptr[7] << (8 * 7))); |
| #else |
| return word; |
| #endif |
| } |
| |
| /* { dg-final { scan-tree-dump "return word_\[0-9]*\\(D\\);" "optimized" } } */ |