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