(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr48235.c
       1  /* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
       2  /* { dg-require-effective-target freorder } */
       3  /* { dg-options "-O -fno-guess-branch-probability -fpeel-loops -freorder-blocks-and-partition -fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2" } */
       4  struct intC
       5  {
       6    short x;
       7    short y;
       8  };
       9  
      10  int size_x;
      11  
      12  static inline int
      13  TileDiffXY (int x, int y)
      14  {
      15    return (y * size_x) + x;
      16  }
      17  
      18  struct HangarTileTable
      19  {
      20    struct intC ti;
      21    int hangar_num;
      22  };
      23  
      24  struct AirportSpec
      25  {
      26    struct HangarTileTable *depot_table;
      27    int size;
      28  };
      29  
      30  void Get ();
      31  struct AirportSpec dummy;
      32  
      33  static inline int
      34  GetRotatedTileFromOffset (int *a, struct intC tidc)
      35  {
      36    if (!*a)
      37      Get ();
      38    switch (*a)
      39      {
      40      case 0:
      41        return (tidc.y << size_x) + tidc.x;
      42      case 1:
      43        return TileDiffXY (tidc.y, dummy.size - tidc.x);
      44      case 2:
      45        return TileDiffXY (tidc.x, dummy.size - tidc.y);
      46      case 3:
      47        return TileDiffXY (dummy.size - 1, tidc.x);
      48      }
      49  }
      50  
      51  int
      52  GetHangarNum (int *a)
      53  {
      54  	int i;
      55    for (i = 0; i < dummy.size; i++)
      56      if (GetRotatedTileFromOffset (a, dummy.depot_table[i].ti))
      57        return dummy.depot_table[i].hangar_num;
      58  }