aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2021-02-17 19:37:18 +0100
committerHans-Peter Nilsson <hp@axis.com>2021-02-22 17:59:14 +0100
commit6cb68940dcf9d80ff60576a1b5769cb12d195a03 (patch)
treea5e4269f7cc4558fce59785786803e1bbc298fa5 /libgcc
parentafed55036b65526be006d55f003f670ebeadb223 (diff)
downloadgcc-6cb68940dcf9d80ff60576a1b5769cb12d195a03.zip
gcc-6cb68940dcf9d80ff60576a1b5769cb12d195a03.tar.gz
gcc-6cb68940dcf9d80ff60576a1b5769cb12d195a03.tar.bz2
cris: Fix addi insn mult vs. shift canonicalization
Ever since the canonicalization clean-up of (mult X (1 << N)) into (ashift X N) outside addresses, the CRIS addi patterns have been unmatched. No big deal. Unfortunately, nobody thought of adjusting reloaded addresses, so transforming mult into a shift has to be a kludged for when reload decides that it has to move an address like (plus (mult reg0 4) reg1) into a register, as happens building libgfortran. (No, simplify_rtx et al don't automatically DTRT.) Something less kludgy would make sense if it wasn't for the current late development stage and reload being deprecated. I don't know whether this issue is absent for LRA, though. I added a testsuite for the reload issue, despite being exposed by a libgfortran build, so the issue would be covered by C/C++ builds, but to the CRIS test-suite, not as a generic test, to avoid bad feelings from anyone preferring short test-times to redundant coverage. gcc: * config/cris/cris.c (cris_print_operand) <'T'>: Change valid operand from is now an addi mult-value to shift-value. * config/cris/cris.md (*addi): Change expression of scaled operand from mult to ashift. * config/cris/cris.md (*addi_reload): New insn_and_split. gcc/testsuite: * gcc.target/cris/torture/sync-reload-mul-1.c: New test.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions