Here are five patches that together allow combine to do more useful work with PARALLELs of two SETs, like on many machines a set of a GPR and one of the condition code, or a GPR and the carry bit on PowerPC, or two GPRs on some machines.
The first patch is just for debug. The second is the real meat: it allows combining an I2 that has two SETs. The third adds a regno field to LOG_LINKS, which the fourth then uses in distribute_log_links; without that, most parallels lose their log_links early. The fifth removes a SET from the combination result if it is (now) dead, if what's left is a valid instruction. Bootstrapped and tested on powerpc64-linux (tree of a week ago), all five together, -m64,-m32,-m32/-mpowerpc64,-m64/-mlra; no regressions. Checks of the separate patches still running. Is this okay for mainline if it passes? Segher Segher Boessenkool (5): combine: more verbose costs output combine: handle I2 a parallel of two SETs combine: add regno field to LOG_LINKS combine: distribute_log_links for PARALLELs of SETs combine: preferably delete dead SETs in PARALLELs gcc/combine.c | 313 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 191 insertions(+), 122 deletions(-) -- 1.8.1.4