aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorsegher <segher@138bc75d-0d04-0410-961f-82ee72b054a4>2017-11-17 14:53:29 +0000
committersegher <segher@138bc75d-0d04-0410-961f-82ee72b054a4>2017-11-17 14:53:29 +0000
commite773de65bc57bb0e8021d2469eafed593028cc23 (patch)
tree5e9aaec9a490509e5915b56f470e26eacc2d6f34 /libgcc
parenta585d69e36faf7a5521e63e60ac6ff18b0978e44 (diff)
combine: Add added_notes_insn
This patch makes combine reconsider insns it added notes to. This matters for example if the note is a REG_DEAD; without the note the setter of the register has to be kept around in the result of combinations, so it cannot be a 2->1 combination, and the cost of the result is higher than without that extra set, so try_combine may refuse the combination with the set, but allow it without the set. This fixes a regression for powerpc: pr69946.c has started to fail after the bitfield expansion changes. GCC used to generate lwz 3,0(9) rlwinm 3,3,12,20,23 ori 3,3,0x11 rotldi 3,3,52 bl bar but now it does lwz 3,0(9) rldicr 3,3,32,3 srdi 3,3,48 ori 3,3,0x110 sldi 3,3,48 bl bar (an instruction too many). After this patch it is lwz 3,0(9) rlwinm 3,3,16,16,19 ori 3,3,0x110 sldi 3,3,48 bl bar (the testcase still does not pass, it looks for very specific insns). * combine.c (added_notes_insn): New. (try_combine): Handle added_notes_insn like added_links_insn. Rewrite return value code. (distribute_notes): Set added_notes_insn to the earliest insn we added a note to. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254875 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions