/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ /* { dg-options " -O -fno-guess-branch-probability -fpeel-loops -freorder-blocks-and-partition -fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2 -ftree-pre" } */ struct intC { short x; short y; }; void Get(void); int size_x; struct { int *depot_table; struct intC *ti; int size; } 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 tidc.y + (dummy.size - tidc.x) * size_x; case 2: return tidc.x + (dummy.size - tidc.y) * size_x; case 3: return (dummy.size - tidc.x); } return 0; } int GetHangarNum (int *a, int i) { while (dummy.size) if (GetRotatedTileFromOffset (a, dummy.ti[i])) return *dummy.depot_table; return 0; }