hi, Richard, This version of patch showed no regressions on mipsel-unknown-linux-gnu. Thanks, Dinar. On Wed, Sep 21, 2011 at 4:59 PM, Richard Sandiford wrote: > Dinar Temirbulatov writes: >> @@ -14696,7 +14696,11 @@ mips_avoid_hazard (rtx after, rtx insn, >>       clobber hi and lo.  */ >>    if (*hilo_delay < 2 && reg_set_p (lo_reg, pattern)) >>      nops = 2 - *hilo_delay; >> -  else if (*delayed_reg != 0 && reg_referenced_p (*delayed_reg, pattern)) >> +  else if ((*delayed_reg != 0 && reg_referenced_p (*delayed_reg, pattern)) >> +         && !((GET_MODE (*delayed_reg) == DFmode && set_after != 0 >> +            && (set = single_set (insn)) != NULL_RTX && GET_MODE (SET_DEST(set)) == DFmode >> +            && XINT((XEXP (pattern, 1)), 1) == UNSPEC_LOAD_HIGH >> +            && XINT((XEXP (*set_after, 1)), 1) == UNSPEC_LOAD_LOW))) > > This isn't safe because the patterns might not be UNSPECs (so XINT (...) > would be meaningless).  It's better to check the insn code instead. > Something like: > >  else if (*delayed_reg != 0 >           && reg_referenced_p (*delayed_reg, pattern) >           && !(recog_memoized (insn) == CODE_FOR_load_highdf >                && recog_memoized (*set_after) == CODE_FOR_load_lowdf)) > > (untested).  Note that *set_after should always be nonnull if > *delayed_reg is. > > Looks good otherwise. > > Richard >