/* { dg-do compile } */ /* { dg-options "-O2 -ftree-loop-distribution" } */ struct rtx_def { int a; }; typedef struct rtx_def *rtx; struct rd { int alternative_enabled_p[100]; rtx operand[100]; int n_operands; }; rtx this_insn; int n_reloads; int n_replacements; int n_earlyclobbers; int replace_reloads; int hard_regs_live_known; short* static_reload_reg_p; struct rd recog_data; int find_reloads (rtx insn, int replace, int ind_levels, int live_known, short *reload_reg_p) { int i, j; int noperands = replace; int no_input_reloads = 0; int n_alternatives = replace; char this_alternative_match_win[30]; char this_alternative_win[30]; char this_alternative_earlyclobber[30]; int this_alternative_matches[30]; int goal_alternative[30]; int this_alternative_number; char goal_alternative_match_win[30]; char goal_alternative_win[30]; int best; int operand_mode[30]; int retval = 0; for (this_alternative_number = 0; this_alternative_number < n_alternatives; this_alternative_number++) { int losers = 0; int bad = 0; if (!recog_data.alternative_enabled_p[this_alternative_number]) { int i; for (i = 0; i < recog_data.n_operands; i++) ; continue; } for (i = 0; i < noperands; i++) if (this_alternative_earlyclobber[i] && (this_alternative_win[i] || this_alternative_match_win[i])) { if (j != noperands) { losers++; for (j = 0; j < noperands; j++) if (this_alternative_matches[j] == i && this_alternative_match_win[j]) { this_alternative_win[j] = 0; this_alternative_match_win[j] = 0; losers++; } } } if (losers == 0) { for (i = 0; i < noperands; i++) { goal_alternative_win[i] = 0; goal_alternative_match_win[i] = 0; } goto finish; } if (! bad && best > losers) { for (i = 0; i < noperands; i++) { goal_alternative[i] = 0; goal_alternative_win[i] = 0; } } } finish: for (i = 0; i < noperands; i++) if (! goal_alternative_win[i]) { rtx op = recog_data.operand[i]; int mode = operand_mode[i]; if (((ix86_preferred_reload_class ((op), (goal_alternative[i])) == 2) || no_input_reloads) && mode != 0) {} } return retval; }