[Bug target/53987] [SH] Unnecessary zero-extensions
olegendo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Aug 1 09:57:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53987
--- Comment #12 from Oleg Endo <olegendo at gcc dot gnu.org> ---
The following case:
int
fun_01 (char* x, char* y, int z)
{
return ((x[1] & x[2] & x[3]) == 0) + z;
}
results in:
add #1,r4
mov.b @r4+,r2
mov #0,r0
mov.b @r4+,r1
and r2,r1
mov.b @r4+,r2
extu.b r1,r1 <<< unnecessary
tst r2,r1
rts
addc r6,r0
The tstsi_t splitter has some code to eliminate some sign/zero extensions but
it doesn't see through the and/or/xor insns. Maybe it's better to a separate
pass that optimizes sign/zero extensions instead of adding more clutter to the
splitters.
More information about the Gcc-bugs
mailing list