[(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r,r,&r,x")
(any_or_plus:<DWI>
(ashift:<DWI>
- (zero_extend:<DWI>
+ (any_extend:<DWI>
(match_operand:DWIH 1 "nonimmediate_operand" "r,m,r,m,x"))
(match_operand:QI 2 "const_int_operand"))
(zero_extend:<DWI>
(zero_extend:<DWI>
(match_operand:DWIH 1 "nonimmediate_operand" "r,m,r,m"))
(ashift:<DWI>
- (zero_extend:<DWI>
+ (any_extend:<DWI>
(match_operand:DWIH 2 "nonimmediate_operand" "r,r,m,m"))
(match_operand:QI 3 "const_int_operand"))))]
"INTVAL (operands[3]) == <MODE_SIZE> * BITS_PER_UNIT"
[(set (match_operand:<DWI> 0 "nonimmediate_operand" "=r,o,o,r")
(any_or_plus:<DWI>
(ashift:<DWI>
- (zero_extend:<DWI>
+ (any_extend:<DWI>
(match_operand:DWIH 1 "nonimmediate_operand" "r,r,r,m"))
(match_operand:QI 2 "const_int_operand"))
(match_operand:<DWI> 3 "const_scalar_int_operand" "n,n,Wd,n")))]
--- /dev/null
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2" } */
+
+__int128 foo(long long x, unsigned long long y)
+{
+ return ((__int128)x<<64) | y;
+}
+
+/* { dg-final { scan-assembler-not "xorl" } } */
+/* { dg-final { scan-assembler-not "orq" } } */