On Wed, 2014-10-01 at 16:34 -0600, Jeff Law wrote:
> This was inspired by a discussion with Felix who was making changes in
> this area.
>
> Basically this promotes the "init_insns" field within struct equivalence
> from an rtx to an rtx_insn_list.
>
> The only thing that's really interesting here is the old code exploits
> the fact that we could put any RTX in the list by shoving const0_rtx
> into the init_insns list as a marker to indicate we've already
> determined the relevant pseudo must not have an equivalence.
>
> Thus we could have the following objects in the init_insns field:
>
> NULL
> const0_rtx
> INSN_LIST ...
>
> This patch uses INSN_LIST (NULL_RTX, NULL) as the special marker. Thus
> the only two things that would exist in the init_insns field would be
> NULL or an INSN_LIST. Goodness.
>
> Rather than stash away the special marker INSN_LIST into a global
> variable or something similar, we instead to do a two step check for the
> marker. First verify that the insn_list field is non-NULL, then look at
> the first insn in the list and see if that is NULL.
>
> Bootstrapped and regression tested on i686-unknown-linux-gnu and
> x86_64-unknown-linux-gnu.
>
> Ok for the trunk?
>
[...]
> * ira.c (struct equivalence): Promote INIT_INSNs field to
> an rtx_insn_list. Add comments.
> (no_equiv): Promote LIST to an rtx_insn_list. Update
> testing for and creating the special marker. Use methods
> to extract the insn and next pointers.
> (update_equiv_regs): Update test for special marker in the
> INIT_INSNs list.
>
> diff --git a/gcc/ira.c b/gcc/ira.c
[...]
> @@ -3258,9 +3266,9 @@ no_equiv (rtx reg, const_rtx store ATTRIBUTE_UNUSED,
> return;
> ira_reg_equiv[regno].defined_p = false;
> ira_reg_equiv[regno].init_insns = NULL;
> - for (; list; list = XEXP (list, 1))
> + for (; list; list = list->next ())
> {
> - rtx insn = XEXP (list, 0);
> + rtx insn = list->insn ();
> remove_note (insn, find_reg_note (insn, REG_EQUIV, NULL_RTX));
FWIW, presumably "insn" here also can now be an rtx_insn *?
(I'd like to eventually strengthen the params to the note-handling
functions, so fixing this up now would help with that).
> }
[...]