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))