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

--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
The avr backend has some combiner patterns to mitigate the bloated code,
however since recently, some pass is popping up subregs like in:

(insn 10 9 15 2 (set (reg:HI 48 [ _5 ])
        (plus:HI (reg/v:HI 46 [ x ])
            (subreg:HI (reg:SI 50) 0))) "foo.c":54:14 167 {*addhi3_split}
     (expr_list:REG_DEAD (reg:SI 50)
        (expr_list:REG_DEAD (reg/v:HI 46 [ x ])
            (nil))))

that are frowned upon by combine:

Failed to match this instruction:
(set (reg:HI 48 [ _5 ])
    (plus:HI (clobber:HI (const_int 0 [0]))
        (reg:HI 51 [ x ])))

etc. for

int add_ge0_32 (int x, long c) {
    return x + (c >= 0);
}

int add_lt0_32 (int x, long c) {
    return x + (c < 0);
}

Reply via email to