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

Reply via email to