@@ -110,6 +110,58 @@ define <4 x i32> @extend_high_i16x8_u(<8 x i16> %v) {
110
110
ret <4 x i32 > %extended
111
111
}
112
112
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
+
113
165
;; Also test that similar patterns with offsets not corresponding to
114
166
;; the low or high half are correctly expanded.
115
167
0 commit comments