https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103124
--- Comment #5 from HaoChen Gui <guihaoc at gcc dot gnu.org> --- (In reply to Segher Boessenkool from comment #4) > Skipping mode TI for zero_extend lowering. > Splitting mode TI for ashift lowering with shift amounts = > Splitting mode TI for lshiftrt lowering with shift amounts = > Splitting mode TI for ashiftrt lowering with shift amounts = > > All these should be fixed. But it is a red herring here, since the shift we > have is in DImode already anyway, not TImode. > > Confirmed btw. I not sure if splitting TI for zero_extend or shift is necessary. Do we generate zero_extend:TI rtx or ashift:TI rtx? During expand, these operations already expand to some operations on DI mode. They will be split latter if TI copy splitting is allowed. zero_extend b = (unsigned __int128) a; (insn 7 6 8 2 (set (subreg:DI (reg:TI 119) 8) (const_int 0 [0])) "split1.c":5:10 -1 (nil)) ashift b = a << 3; (insn 6 3 7 2 (set (reg:DI 122) (lshiftrt:DI (subreg:DI (reg/v:TI 119 [ a ]) 0) (const_int 61 [0x3d]))) "split.c":4:9 -1 (nil)) (insn 7 6 8 2 (set (subreg:DI (reg:TI 121) 8) (ashift:DI (subreg:DI (reg/v:TI 119 [ a ]) 8) (const_int 3 [0x3]))) "split.c":4:9 -1 (nil)) (insn 8 7 9 2 (set (subreg:DI (reg:TI 121) 8) (ior:DI (reg:DI 122) (subreg:DI (reg:TI 121) 8))) "split.c":4:9 -1 (nil)) (insn 9 8 10 2 (set (subreg:DI (reg:TI 121) 0) (ashift:DI (subreg:DI (reg/v:TI 119 [ a ]) 0) (const_int 3 [0x3]))) "split.c":4:9 -1 (nil))