| /* PR tree-optimization/59358 */ |
| |
| __attribute__((noinline, noclone)) int |
| foo (int *x, int y) |
| { |
| int z = *x; |
| if (y > z && y <= 16) |
| while (y > z) |
| z *= 2; |
| return z; |
| } |
| |
| int |
| main () |
| { |
| int i; |
| for (i = 1; i < 17; i++) |
| { |
| int j = foo (&i, 16); |
| int k; |
| if (i >= 8 && i <= 15) |
| k = 16 + (i - 8) * 2; |
| else if (i >= 4 && i <= 7) |
| k = 16 + (i - 4) * 4; |
| else if (i == 3) |
| k = 24; |
| else |
| k = 16; |
| if (j != k) |
| __builtin_abort (); |
| j = foo (&i, 7); |
| if (i >= 7) |
| k = i; |
| else if (i >= 4) |
| k = 8 + (i - 4) * 2; |
| else if (i == 3) |
| k = 12; |
| else |
| k = 8; |
| if (j != k) |
| __builtin_abort (); |
| } |
| return 0; |
| } |