Dinar Temirbulatov <dtemirbula...@gmail.com> 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