aboutsummaryrefslogtreecommitdiff
path: root/libgcc/config/rx
diff options
context:
space:
mode:
authorManolis Tsamis <manolis.tsamis@vrull.eu>2024-08-20 09:16:29 +0200
committerPhilipp Tomsich <philipp.tomsich@vrull.eu>2024-08-23 20:19:55 +0200
commita9f5e23aba1a6f4ec32f1147b340a8145d827da9 (patch)
tree8a1d9a1b9573204188842d8536b268d338c59b9c /libgcc/config/rx
parentc9e2d0ec6eabc2a6b8c00984b2b2bc48565bb99b (diff)
downloadgcc-a9f5e23aba1a6f4ec32f1147b340a8145d827da9.zip
gcc-a9f5e23aba1a6f4ec32f1147b340a8145d827da9.tar.gz
gcc-a9f5e23aba1a6f4ec32f1147b340a8145d827da9.tar.bz2
ifcvt: Do not overwrite results in noce_convert_multiple_sets [PR116372, PR116405]
Now that more operations are allowed for noce_convert_multiple_sets, it is possible that the same register appears multiple times as target in a basic block. After noce_convert_multiple_sets_1 is called we potentially also emit register moves from temporaries back to the original targets. In some cases where the target registers overlap with the block's condition, these register moves may overwrite intermediate variables because they're emitted after the if-converted code. To address this issue we now iterate backwards and keep track of seen registers when emitting these final register moves. PR rtl-optimization/116372 PR rtl-optimization/116405 gcc/ChangeLog: * ifcvt.cc (noce_convert_multiple_sets): Iterate backwards and track target registers. gcc/testsuite/ChangeLog: * gcc.dg/pr116372.c: New test. * gcc.dg/pr116405.c: New test.
Diffstat (limited to 'libgcc/config/rx')
0 files changed, 0 insertions, 0 deletions