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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(insn 6 3 12 2 (set (reg:DI 105 [ dataD.4432 ])
        (sign_extend:DI (reg/v:SI 102 [ dataD.4432 ]))) "/app/example.cpp":3:12
105 {*extendsidi2_aarch64}
     (expr_list:REG_DEAD (reg/v:SI 102 [ dataD.4432 ])
        (nil)))
(insn 12 6 13 2 (set (reg:DI 110 [ _3+8 ])
        (ashiftrt:DI (reg:DI 105 [ dataD.4432 ])
            (const_int 11 [0xb]))) "/app/example.cpp":3:29 755
{*aarch64_ashr_sisd_or_int_di3}
     (nil))
(insn 13 12 23 2 (set (reg:DI 109 [ _3 ])
        (ashift:DI (reg:DI 105 [ dataD.4432 ])
            (const_int 53 [0x35]))) "/app/example.cpp":3:29 751
{*aarch64_ashl_sisd_or_int_di3}
     (expr_list:REG_DEAD (reg:DI 105 [ dataD.4432 ])
        (nil)))
...

Could be just simplified to (ignore the ordering difference):

(insn 23 13 24 2 (set (reg:DI 109 [ _3+8 ])
        (ashift:DI (subreg:DI (reg:SI 105) 0)
            (const_int 53 [0x35]))) "/app/example.cpp":4:1 751
{*aarch64_ashl_sisd_or_int_di3}
     (nil))
(insn 24 23 19 2 (set (reg:DI 110 [ _3 ])
        (sign_extract:DI (subreg:DI (reg:SI 105) 0)
            (const_int 21 [0x15])
            (const_int 11 [0xb]))) "/app/example.cpp":4:1 801 {*extvdi}
     (expr_list:REG_DEAD (reg:SI 113)
        (nil)))

Which is what combine did in GCC 14.

Is this because only combine knows creats sign_extract?

Reply via email to