On 11/25/14 14:47, Segher Boessenkool wrote:
On Tue, Nov 25, 2014 at 11:46:52AM -0700, Jeff Law wrote:
On 11/14/14 12:19, Segher Boessenkool wrote:
With this new field in place, we can have LOG_LINKS for insns that set
more than one register and distribute them properly in distribute_links.
This then allows many more PARALLELs to be combined.

Also split off new functions can_combine_{def,use}_p from the
create_log_links function.


2014-11-14  Segher Boessenkool  <seg...@kernel.crashing.org>

gcc/
        * combine.c (struct insn_link): New field `regno'.
        (alloc_insn_link): New parameter `regno'.  Use it.
        (find_single_use): Check the new field.
        (can_combine_def_p, can_combine_use_p): New functions.  Split
        off from ...
        (create_log_links): ... here.  Correct data type of `regno'.
        Adjust call to alloc_insn_link.
        (adjust_for_new_dest): Find regno, use it in call to
        alloc_insn_link.
        (try_combine): Adjust call to alloc_insn_link.
        (distribute_links): Check the new field.

Didn't you lose the check that avoids duplicated LOG_LINKs?

I don't think so; if I did, that's a bug.

Or is the
claim that the check is no longer needed because there are no duplicates
now that we include the register associated with the link?

Are you talking about create_log_links?  There can be no duplicates there
(anymore), that would be multiple defs of the same reg in the same insn,
indeed.
Yes, I was referring to the code in create_log_links. You dropped the check for duplicate links. It caught my eye when reading the changes, but then I realized the check may no longer be necessary.

Hmm, what about an insn that has two destinations, which happen to be upper and lower SUBREGs of a pseudo. Would that create duplicate links after your change?


Jeff

Reply via email to