| /* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ |
| /* { dg-require-effective-target freorder } */ |
| /* { dg-options "-O -fno-guess-branch-probability -fpeel-loops -freorder-blocks-and-partition -fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2" } */ |
| struct intC |
| { |
| short x; |
| short y; |
| }; |
| |
| int size_x; |
| |
| static inline int |
| TileDiffXY (int x, int y) |
| { |
| return (y * size_x) + x; |
| } |
| |
| struct HangarTileTable |
| { |
| struct intC ti; |
| int hangar_num; |
| }; |
| |
| struct AirportSpec |
| { |
| struct HangarTileTable *depot_table; |
| int size; |
| }; |
| |
| void Get (); |
| struct AirportSpec dummy; |
| |
| static inline int |
| GetRotatedTileFromOffset (int *a, struct intC tidc) |
| { |
| if (!*a) |
| Get (); |
| switch (*a) |
| { |
| case 0: |
| return (tidc.y << size_x) + tidc.x; |
| case 1: |
| return TileDiffXY (tidc.y, dummy.size - tidc.x); |
| case 2: |
| return TileDiffXY (tidc.x, dummy.size - tidc.y); |
| case 3: |
| return TileDiffXY (dummy.size - 1, tidc.x); |
| } |
| } |
| |
| int |
| GetHangarNum (int *a) |
| { |
| int i; |
| for (i = 0; i < dummy.size; i++) |
| if (GetRotatedTileFromOffset (a, dummy.depot_table[i].ti)) |
| return dummy.depot_table[i].hangar_num; |
| } |