[Bug target/92291] Non-optimal code generated for H8
law at redhat dot com
gcc-bugzilla@gcc.gnu.org
Mon Feb 3 21:50:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92291
--- Comment #2 from Jeffrey A. Law <law at redhat dot com> ---
So one more tidbit before I have to put this down.
The reason we don't CSE the library calls is because the REG_EQUAL note we rely
upon is removed.
At the start of CSE we call df_analyze which recomputes the REG_DEAD and
REG_UNUSED notes. As a side effect it *removes* REG_EQUAL notes for any
pseudos that are dead.
If I manually prevent the note from being removed I get:
mov.w r4,@-r7
mov.w r5,@-r7
mov.w r6,@-r7
mov.w #13,r1
jsr @___mulhi3
mov.w #_x,r5
add.w r0,r5
mov.b #1,r6l
mov.b r6l,@r5
mov.b r6l,@(1,r5)
mov.w @r7+,r6
mov.w @r7+,r5
mov.w @r7+,r4
rts
Which is definitely an improvement as the libcall is CSE'd. Of course we're
not using the multiplier which would likely be even better, even if we have to
expand a cross multiplication.
More information about the Gcc-bugs
mailing list