https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70416

--- Comment #21 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #18)
> 
> The GCC testsuite results look OK.  However, CSiBE shows
> 
>   sum:  3342539 -> 3351695    +9156 / +0.273924 %
> 
> which is not so nice.  For example, in bzip2/blocksort, the increase seems
> to be caused mainly by things like:
> 
>             before                          after
>         mov     #92,r0                  mov     r15,r0
>         sub     r7,r6                   add     #64,r0
>         mov.l   @(r0,r15),r5            sub     r7,r6
>                                         mov.l   @(28,r0),r5

Just out of curiosity, I've tried to move the last two *addsi3 patterns to the
very bottom of sh.md (with the small patch in c#15 applied before).  Funnily,
the impossible asm reload problem pops up again and CSiBE numbers go back to
normal.  

So it seems there's something to my theory in c#14.  When reload is emitting
the address reg modification insns, it first looks for the "Ry = Rx + const"
and if that is not found it tries the @(reg + reg) mode instead.  Trying to
"fix" this with the ordering of addsi3 patterns seems a bit weird.  I'll see if
there's some other way...

Reply via email to