This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/54236] [SH] Improve addc and subc insn utilization


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

--- Comment #15 from Oleg Endo <olegendo at gcc dot gnu.org> ---
The following shows missed subc cases when there are constants involved.  Addc
cases can be constructed in the same way.

int fun (int x)
{
  return x - 1 - (x > 100);
}

-O2 -m4:
        mov     #100,r1
        mov     r4,r0
        cmp/gt  r1,r4
        movt    r1
        sett
        rts     
        subc    r1,r0

better:
        mov     #100,r1
        mov     r4,r0
        cmp/gt  r1,r4
        mov     #1,r1
        rts
        subc    r1,r0

Combine is looking for a pattern like:
(parallel [
        (set (reg:SI 168 [ D.1659 ])
            (plus:SI (not:SI (gt:SI (reg/v:SI 167 [ x ])
                        (reg:SI 172)))
                (reg/v:SI 167 [ x ])))
        (clobber (reg:SI 147 t))
    ])

constants -1 and -2 are represented as not (0) and not (1) in this case.


int fun (int x)
{
  return x - 10 - (x > 100);
}

-O2 -m4:
        mov     #100,r1
        mov     r4,r0
        cmp/gt  r1,r4
        add     #-10,r0
        mov     #0,r1
        rts     
        subc    r1,r0

better:
        mov     #100,r1
        mov     r4,r0
        cmp/gt  r1,r4
        mov     #10,r1
        rts     
        subc    r1,r0

Combine is looking for a pattern like

Failed to match this instruction:
(parallel [
        (set (reg:SI 168 [ D.1659 ])
            (plus:SI (minus:SI (reg/v:SI 167 [ x ])
                    (gt:SI (reg/v:SI 167 [ x ])
                        (reg:SI 172)))
                (const_int -10 [0xfffffffffffffff6])))
        (clobber (reg:SI 147 t))
    ])

there is already a similar pattern *subc_negreg_t


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]