modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/20020604-1.c (about)

     1  /* { dg-do assemble } */
     2  /* { dg-require-effective-target ptr32plus } */
     3  /* { dg-xfail-if "The array too big" { "h8300-*-*" } { "-mno-h" "-mn" } { "" } } */
     4  
     5  /* PR c/6957
     6     This testcase ICEd at -O2 on IA-32, because
     7     (insn 141 139 142 (set (subreg:SF (reg:QI 72) 0)
     8  	   (plus:SF (reg:SF 73)
     9  	       (reg:SF 76))) 525 {*fop_sf_comm_nosse} (insn_list 134 (nil))
    10         (expr_list:REG_DEAD (reg:SF 73) (nil)))
    11     couldn't be reloaded. */
    12  
    13  void
    14  foo (unsigned int n, int x, int y, unsigned char *z)
    15  {
    16    int a, b;
    17    float c[2048][4];
    18  
    19    switch (x)
    20      {
    21      case 0x1906:
    22        a = b = -1;
    23        break;
    24      case 0x190A:
    25        a = b = -1;
    26        break;
    27      case 0x8049:
    28        a = b = -1;
    29        break;
    30      case 0x1907:
    31        a = 1;
    32        b = 2;
    33        break;
    34      default:
    35        return;
    36      }
    37  
    38    if (a >= 0)
    39      {
    40        unsigned char *d = z;
    41        unsigned int i;
    42        for (i = 0; i < n; i++)
    43  	{
    44  	  do
    45  	    {
    46  	      union
    47  	      {
    48  		float r;
    49  		unsigned int i;
    50  	      }
    51  	      e;
    52  	      e.r = c[i][1];
    53  	      d[a] =
    54  		((e.i >= 0x3f7f0000) ? ((int) e.i <
    55  					    0) ? (unsigned char) 0
    56  		 : (unsigned char) 255 : (e.r =
    57  					  e.r * (255.0F / 256.0F) +
    58  					  32768.0F, (unsigned char) e.i));
    59  	    }
    60  	  while (0);
    61  	  d += y;
    62  	}
    63      }
    64  
    65    if (b >= 0)
    66      {
    67        unsigned char *d = z;
    68        unsigned int i;
    69        for (i = 0; i < n; i++)
    70  	{
    71  	  do
    72  	    {
    73  	      union
    74  	      {
    75  		float r;
    76  		unsigned int i;
    77  	      }
    78  	      e;
    79  	      e.r = c[i][2];
    80  	      d[b] =
    81  		((e.i >= 0x3f7f0000) ? ((int) e.i <
    82  					    0) ? (unsigned char) 0
    83  		 : (unsigned char) 255 : (e.r =
    84  					  e.r * (255.0F / 256.0F) +
    85  					  32768.0F, (unsigned char) e.i));
    86  	    }
    87  	  while (0);
    88  	  d += y;
    89  	}
    90      }
    91  }