diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2023-03-28 03:20:05 +0200 |
---|---|---|
committer | Hans-Peter Nilsson <hp@bitrange.com> | 2023-03-28 03:20:05 +0200 |
commit | 75be4badfeda2448383429f6061e095afd5a4ee5 (patch) | |
tree | 39d64d4e527d24cea969ecf2ef82a3b21242de3c /gcc/range-op-float.cc | |
parent | bab2fb9d63ef1e3d51b88dcdf1d7d533fb6e6844 (diff) | |
download | gcc-75be4badfeda2448383429f6061e095afd5a4ee5.zip gcc-75be4badfeda2448383429f6061e095afd5a4ee5.tar.gz gcc-75be4badfeda2448383429f6061e095afd5a4ee5.tar.bz2 |
CRIS: Improve bailing for eliminable compares for "addi" vs. "add"
This patch affects a post-reload define_split for CRIS that transforms
a condition-code-clobbering addition into a non-clobbering addition.
(A "two-operand" addition between registers is the only insn that has
both a condition-code-clobbering and a non-clobbering variant for
CRIS.) Many more "add.d":s are replaced by non-condition-code-
clobbering "addi":s after this patch, but most of the transformations
don't matter.
CRIS with LRA generated code that exposed a flaw with the original
patch: it bailed too easily, on *any* insn using the result of the
addition. To wit, more effort than simply applying reg_mentioned_p is
needed to inspect the user, in the code to avoid munging an insn
sequence that cmpelim is supposed to handle.
With this patch coremark score for CRIS (*with reload*) improves by
less than 0.01% (a single "nop" is eliminated in
core_state_transition, in an execution path that affects ~1/20 of all
of the 10240 calls). However, the original cause for this patch is to
not regress gcc.target/cris/pr93372-44.c for LRA, where otherwise a
needless "cmpq" is emitted. For CRIS with LRA, the performance effect
on coremark isn't even measurable, except by reducing the size of the
executable due to affecting non-called library code.
* config/cris/cris.md ("*add<mode>3_addi"): Improve to bail only
for possible eliminable compares.
Diffstat (limited to 'gcc/range-op-float.cc')
0 files changed, 0 insertions, 0 deletions