> You mean this piece of nice code:
> 
>           /* Step 4: Close chains for registers that die here, unless
>              the register is mentioned in a REG_UNUSED note.  In that
>              case we keep the chain open until step #7 below to ensure
>              it conflicts with other output operands of this insn.
>              See PR 52573.  Arguably the insn should not have both
>              notes; it has proven difficult to fix that without
>              other undesirable side effects.  */
>           for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
>             if (REG_NOTE_KIND (note) == REG_DEAD
>                 && !find_regno_note (insn, REG_UNUSED, REGNO (XEXP (note,
> 0)))) {
>                 remove_from_hard_reg_set (&live_hard_regs,
>                                           GET_MODE (XEXP (note, 0)),
>                                           REGNO (XEXP (note, 0)));
>                 scan_rtx (insn, &XEXP (note, 0), NO_REGS, terminate_dead,
>                           OP_IN);
>               }
> 
> ?

That one is fairly recent, but I was rather referring to:

          /* Process the insn, determining its effect on the def-use
             chains and live hard registers.  We perform the following
             steps with the register references in the insn, simulating
             its effect:
             (1) Deal with earlyclobber operands and CLOBBERs of non-operands
                 by creating chains and marking hard regs live.
[...]
             (7) For any REG_UNUSED, close any chains we just opened.

(7) does actually more than advertised above:

          /* Step 7: Close chains for registers that were never
             really used here.  */
          for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
            if (REG_NOTE_KIND (note) == REG_UNUSED)
              {
                remove_from_hard_reg_set (&live_hard_regs,
                                          GET_MODE (XEXP (note, 0)),
                                          REGNO (XEXP (note, 0)));

So (7) also closes the live ranges of hard regs opened in (1).

-- 
Eric Botcazou

Reply via email to