@@ -110,6 +110,58 @@ define <4 x i32> @extend_high_i16x8_u(<8 x i16> %v) {
110110 ret <4 x i32 > %extended
111111}
112112
113+ define <2 x i64 > @extend_low_i32x4_s (<4 x i32 > %v ) {
114+ ; CHECK-LABEL: extend_low_i32x4_s:
115+ ; CHECK: .functype extend_low_i32x4_s (v128) -> (v128)
116+ ; CHECK-NEXT: # %bb.0:
117+ ; CHECK-NEXT: local.get 0
118+ ; CHECK-NEXT: i64x2.extend_low_i32x4_s
119+ ; CHECK-NEXT: # fallthrough-return
120+ %low = shufflevector <4 x i32 > %v , <4 x i32 > undef ,
121+ <2 x i32 > <i32 0 , i32 1 >
122+ %extended = sext <2 x i32 > %low to <2 x i64 >
123+ ret <2 x i64 > %extended
124+ }
125+
126+ define <2 x i64 > @extend_low_i32x4_u (<4 x i32 > %v ) {
127+ ; CHECK-LABEL: extend_low_i32x4_u:
128+ ; CHECK: .functype extend_low_i32x4_u (v128) -> (v128)
129+ ; CHECK-NEXT: # %bb.0:
130+ ; CHECK-NEXT: local.get 0
131+ ; CHECK-NEXT: i64x2.extend_low_i32x4_u
132+ ; CHECK-NEXT: # fallthrough-return
133+ %low = shufflevector <4 x i32 > %v , <4 x i32 > undef ,
134+ <2 x i32 > <i32 0 , i32 1 >
135+ %extended = zext <2 x i32 > %low to <2 x i64 >
136+ ret <2 x i64 > %extended
137+ }
138+
139+ define <2 x i64 > @extend_high_i32x4_s (<4 x i32 > %v ) {
140+ ; CHECK-LABEL: extend_high_i32x4_s:
141+ ; CHECK: .functype extend_high_i32x4_s (v128) -> (v128)
142+ ; CHECK-NEXT: # %bb.0:
143+ ; CHECK-NEXT: local.get 0
144+ ; CHECK-NEXT: i64x2.extend_high_i32x4_s
145+ ; CHECK-NEXT: # fallthrough-return
146+ %low = shufflevector <4 x i32 > %v , <4 x i32 > undef ,
147+ <2 x i32 > <i32 2 , i32 3 >
148+ %extended = sext <2 x i32 > %low to <2 x i64 >
149+ ret <2 x i64 > %extended
150+ }
151+
152+ define <2 x i64 > @extend_high_i32x4_u (<4 x i32 > %v ) {
153+ ; CHECK-LABEL: extend_high_i32x4_u:
154+ ; CHECK: .functype extend_high_i32x4_u (v128) -> (v128)
155+ ; CHECK-NEXT: # %bb.0:
156+ ; CHECK-NEXT: local.get 0
157+ ; CHECK-NEXT: i64x2.extend_high_i32x4_u
158+ ; CHECK-NEXT: # fallthrough-return
159+ %low = shufflevector <4 x i32 > %v , <4 x i32 > undef ,
160+ <2 x i32 > <i32 2 , i32 3 >
161+ %extended = zext <2 x i32 > %low to <2 x i64 >
162+ ret <2 x i64 > %extended
163+ }
164+
113165;; Also test that similar patterns with offsets not corresponding to
114166;; the low or high half are correctly expanded.
115167
0 commit comments