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