(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
pr38385.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -ftree-loop-distribution" } */
       3  
       4  struct rtx_def
       5  {
       6    int a;
       7  };
       8  
       9  typedef struct rtx_def *rtx;
      10  
      11  struct rd {
      12    int alternative_enabled_p[100];
      13    rtx operand[100];
      14    int n_operands;
      15  };
      16  
      17  rtx this_insn;
      18  int n_reloads;
      19  int n_replacements;
      20  int n_earlyclobbers;
      21  int replace_reloads;
      22  int hard_regs_live_known;
      23  short* static_reload_reg_p;
      24  struct rd recog_data;
      25  int ix86_preferred_reload_class (rtx, int);
      26  
      27  int
      28  find_reloads (rtx insn, int replace, int ind_levels, int live_known,
      29  	      short *reload_reg_p)
      30  {
      31    int i, j;
      32    int noperands = replace;
      33  
      34    int no_input_reloads = 0;
      35    int n_alternatives = replace;
      36    char this_alternative_match_win[30];
      37    char this_alternative_win[30];
      38    char this_alternative_earlyclobber[30];
      39    int this_alternative_matches[30];
      40    int goal_alternative[30];
      41    int this_alternative_number;
      42  
      43    char goal_alternative_match_win[30];
      44    char goal_alternative_win[30];
      45    int best;
      46  
      47    int operand_mode[30];
      48    int retval = 0;
      49  
      50    for (this_alternative_number = 0;
      51         this_alternative_number < n_alternatives;
      52         this_alternative_number++)
      53      {
      54  
      55        int losers = 0;
      56        int bad = 0;
      57        
      58        if (!recog_data.alternative_enabled_p[this_alternative_number])
      59  	{
      60  	  int i;
      61  	  
      62  	  for (i = 0; i < recog_data.n_operands; i++)
      63  	    ;
      64  	  
      65  	  continue;
      66  	}
      67        
      68        for (i = 0; i < noperands; i++)
      69  	if (this_alternative_earlyclobber[i]
      70  	    && (this_alternative_win[i] || this_alternative_match_win[i]))
      71  	  {
      72  	    if (j != noperands)
      73  	      {
      74  		losers++;
      75  		
      76  		for (j = 0; j < noperands; j++)
      77  		  if (this_alternative_matches[j] == i
      78  		      && this_alternative_match_win[j])
      79  		    {
      80  		      this_alternative_win[j] = 0;
      81  		      this_alternative_match_win[j] = 0;
      82  		      losers++;
      83  		    }
      84  	      }
      85  	  }
      86        
      87        if (losers == 0)
      88  	{
      89  	  for (i = 0; i < noperands; i++)
      90  	    {
      91  	      goal_alternative_win[i] = 0;
      92  	      goal_alternative_match_win[i] = 0;
      93  	    }
      94  	  
      95  	  goto finish;
      96  	}
      97  
      98        if (! bad && best > losers)
      99  	{
     100  	  for (i = 0; i < noperands; i++)
     101  	    {
     102  	      goal_alternative[i] = 0;
     103  	      goal_alternative_win[i] = 0;
     104  	    }
     105  	}
     106      }
     107    
     108  
     109   finish:
     110  
     111    for (i = 0; i < noperands; i++)
     112      if (! goal_alternative_win[i])
     113        {
     114  	rtx op = recog_data.operand[i];
     115  	int mode = operand_mode[i];
     116  	
     117  	if (((ix86_preferred_reload_class ((op), (goal_alternative[i])) == 2)
     118  	     || no_input_reloads)
     119  	    && mode != 0)
     120  	  {}
     121        }
     122  
     123    return retval;
     124  }
     125