http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49263



--- Comment #20 from Oleg Endo <olegendo at gcc dot gnu.org> 2012-10-31 
13:47:07 UTC ---

(In reply to comment #19)

> Another thing I've noticed...

> Cases such as:

> 

>         mov.l   r0,@r2        ! LS

>         mov     r13,r0        ! MT

>         and     #7,r0         ! EX

>         tst     r0,r0         ! MT

>         bt/s    .L8           ! BR

>         mov.l   r0,@(16,r1)

> 

> where the result of the and op is re-used would be slightly better as:

> 

>         mov.l   r0,@r2       ! LS

>         mov     r13,r0       ! MT

>         tst     #7,r0        ! MT

>         and     #7,r0        ! EX

>         bt/s    .L8          ! BR

>         mov.l   r0,@(16,r1)

> 

> because it reduces dependency on the result of the and op and thus has a 
> higher

> chance to be executed in parallel.



Other similar cases where hoisting the tst insn would make sense:

        mov.b   @(13,r2),r0

        extu.b  r0,r0

        tst     #1,r0

        bt      .L53



        mov.b   @(13,r1),r0

        extu.b  r0,r0

        tst     r0,r0

        bt/s    .L37

Reply via email to