https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122871
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Even the initialize expansion for __int128 on aarch64 is bad.
testcase:
```
#if __SIZEOF_INT128__ != 16
typedef long long large_t;
#else
typedef __int128 large_t;
#endif
large_t ashll_fn (large_t a)
{
large_t c;
c = a << (sizeof(large_t)*8/2+1);
c += a;
return c;
}
```
```
(insn 6 3 7 2 (set (reg:DI 108)
(high:DI (symbol_ref/u:DI ("*.LC0") [flags 0x82])))
"/app/example.cpp":11:5 -1
(nil))
(insn 7 6 8 2 (set (reg/f:DI 107)
(lo_sum:DI (reg:DI 108)
(symbol_ref/u:DI ("*.LC0") [flags 0x82]))) "/app/example.cpp":11:5
-1
(expr_list:REG_EQUAL (symbol_ref/u:DI ("*.LC0") [flags 0x82])
(nil)))
(insn 8 7 9 2 (set (reg:TI 106)
(mem/u/c:TI (reg/f:DI 107) [0 S16 A128])) "/app/example.cpp":11:5 -1
(expr_list:REG_EQUAL (const_wide_int 0x20000000000000001)
(nil)))
(insn 9 8 10 2 (set (reg:DI 109)
(mult:DI (subreg:DI (reg/v:TI 104 [ a ]) 0)
(subreg:DI (reg:TI 106) 0))) "/app/example.cpp":11:5 -1
(nil))
(insn 10 9 11 2 (set (reg:DI 110)
(truncate:DI (lshiftrt:TI (mult:TI (zero_extend:TI (subreg:DI (reg/v:TI
104 [ a ]) 0))
(zero_extend:TI (subreg:DI (reg:TI 106) 0)))
(const_int 64 [0x40])))) "/app/example.cpp":11:5 -1
(nil))
(insn 11 10 12 2 (set (reg:DI 110)
(plus:DI (mult:DI (subreg:DI (reg/v:TI 104 [ a ]) 8)
(subreg:DI (reg:TI 106) 0))
(reg:DI 110))) "/app/example.cpp":11:5 -1
(nil))
(insn 12 11 13 2 (set (reg:DI 110)
(plus:DI (mult:DI (subreg:DI (reg/v:TI 104 [ a ]) 0)
(subreg:DI (reg:TI 106) 8))
(reg:DI 110))) "/app/example.cpp":11:5 -1
(nil))
```