https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108874
--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #8) > (set (reg:SI 98) > (ior:SI (and:SI (lshiftrt:SI (reg/v:SI 97 [ x ]) > (const_int 8 [0x8])) > (const_int 16711935 [0xff00ff])) > (reg:SI 102))) > > as > (set (reg:SI 98) > (ior:SI > (lshiftrt:SI > (and:SI (reg/v:SI 97 [ x ]) (const_int 0xff00ff00) ) > (const_int 8 [0x8])) > (reg:SI 102))) Note there are some similar define_split already in the aarch64 backend around lines 4688. For shift left, but not for shift right.