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

--- Comment #21 from Uroš Bizjak <ubizjak at gmail dot com> ---
Created attachment 65313
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=65313&action=edit
Prototype patch that converts BTS to a canonical form

(In reply to Uroš Bizjak from comment #20)
> (parallel [
>         (set (zero_extract:SI (reg/v:SI 102 [ a ])
>                 (const_int 1 [0x1])
>                 (subreg:QI (reg/v:SI 103 [ b ]) 0))
>             (const_int 1 [0x1]))
>         (clobber (reg:CC 17 flags))
>     ])
> 
> which is another (and probably canonical) form of bit set RTX.

The attached patch converts BTS to its canonical form. Compiles the testcase
from Comment#18 to:

f:
.LFB0:
        .cfi_startproc
        btl     %esi, %edi
        movl    %edi, %eax
        jnc     .L8
        ret
.L8:
        subq    $24, %rsp
        btsl    %esi, %eax
        movl    %eax, 12(%rsp)
        call    g
        movl    12(%rsp), %eax
        addq    $24, %rsp
        ret

Reply via email to