@@ -169,15 +169,11 @@ define <4 x i32> @test_x86_sse2_cvtpd2dq(<2 x double> %a0) #0 {
169
169
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
170
170
; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
171
171
; CHECK-NEXT: call void @llvm.donothing()
172
- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to i128
173
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP2]], 0
174
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP5:%.*]], !prof [[PROF1:![0-9]+]]
175
- ; CHECK: 4:
176
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5:[0-9]+]]
177
- ; CHECK-NEXT: unreachable
178
- ; CHECK: 5:
172
+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer
173
+ ; CHECK-NEXT: [[TMP6:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>
174
+ ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <2 x i32> [[TMP6]], <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
179
175
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> [[A0:%.*]])
180
- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
176
+ ; CHECK-NEXT: store <4 x i32> [[TMP5]] , ptr @__msan_retval_tls, align 8
181
177
; CHECK-NEXT: ret <4 x i32> [[RES]]
182
178
;
183
179
%res = call <4 x i32 > @llvm.x86.sse2.cvtpd2dq (<2 x double > %a0 ) ; <<4 x i32>> [#uses=1]
@@ -191,18 +187,16 @@ define <2 x i64> @test_mm_cvtpd_epi32_zext(<2 x double> %a0) nounwind #0 {
191
187
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
192
188
; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
193
189
; CHECK-NEXT: call void @llvm.donothing()
194
- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to i128
195
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP2]], 0
196
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]
197
- ; CHECK: 4:
198
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
199
- ; CHECK-NEXT: unreachable
200
- ; CHECK: 5:
190
+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer
191
+ ; CHECK-NEXT: [[TMP6:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>
192
+ ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <2 x i32> [[TMP6]], <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
201
193
; CHECK-NEXT: [[CVT:%.*]] = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> [[A0:%.*]])
202
- ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
194
+ ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
195
+ ; CHECK-NEXT: [[RES1:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
203
196
; CHECK-NEXT: [[BC:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64>
204
- ; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
205
- ; CHECK-NEXT: ret <2 x i64> [[BC]]
197
+ ; CHECK-NEXT: [[BC1:%.*]] = bitcast <4 x i32> [[RES1]] to <2 x i64>
198
+ ; CHECK-NEXT: store <2 x i64> [[BC]], ptr @__msan_retval_tls, align 8
199
+ ; CHECK-NEXT: ret <2 x i64> [[BC1]]
206
200
;
207
201
%cvt = call <4 x i32 > @llvm.x86.sse2.cvtpd2dq (<2 x double > %a0 )
208
202
%res = shufflevector <4 x i32 > %cvt , <4 x i32 > zeroinitializer , <4 x i32 > <i32 0 , i32 1 , i32 4 , i32 5 >
@@ -217,28 +211,26 @@ define <2 x i64> @test_mm_cvtpd_epi32_zext_load(ptr %p0) nounwind #0 {
217
211
; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
218
212
; CHECK-NEXT: call void @llvm.donothing()
219
213
; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
220
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP8 :%.*]], !prof [[PROF1]]
214
+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP7 :%.*]], !prof [[PROF1:![0-9]+ ]]
221
215
; CHECK: 3:
222
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
216
+ ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5:[0-9]+ ]]
223
217
; CHECK-NEXT: unreachable
224
218
; CHECK: 4:
225
219
; CHECK-NEXT: [[A0:%.*]] = load <2 x double>, ptr [[P0:%.*]], align 16
226
220
; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P0]] to i64
227
221
; CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], -2147483649
228
222
; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
229
223
; CHECK-NEXT: [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
230
- ; CHECK-NEXT: [[TMP7:%.*]] = bitcast <2 x i64> [[_MSLD]] to i128
231
- ; CHECK-NEXT: [[_MSCMP1:%.*]] = icmp ne i128 [[TMP7]], 0
232
- ; CHECK-NEXT: br i1 [[_MSCMP1]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]
233
- ; CHECK: 9:
234
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
235
- ; CHECK-NEXT: unreachable
236
- ; CHECK: 10:
224
+ ; CHECK-NEXT: [[TMP8:%.*]] = icmp ne <2 x i64> [[_MSLD]], zeroinitializer
225
+ ; CHECK-NEXT: [[TMP9:%.*]] = sext <2 x i1> [[TMP8]] to <2 x i32>
226
+ ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x i32> [[TMP9]], <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
237
227
; CHECK-NEXT: [[CVT:%.*]] = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> [[A0]])
238
- ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
228
+ ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
229
+ ; CHECK-NEXT: [[RES1:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
239
230
; CHECK-NEXT: [[BC:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64>
240
- ; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
241
- ; CHECK-NEXT: ret <2 x i64> [[BC]]
231
+ ; CHECK-NEXT: [[BC1:%.*]] = bitcast <4 x i32> [[RES1]] to <2 x i64>
232
+ ; CHECK-NEXT: store <2 x i64> [[BC]], ptr @__msan_retval_tls, align 8
233
+ ; CHECK-NEXT: ret <2 x i64> [[BC1]]
242
234
;
243
235
%a0 = load <2 x double >, ptr %p0
244
236
%cvt = call <4 x i32 > @llvm.x86.sse2.cvtpd2dq (<2 x double > %a0 )
@@ -330,15 +322,10 @@ define <4 x i32> @test_x86_sse2_cvtps2dq(<4 x float> %a0) #0 {
330
322
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
331
323
; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
332
324
; CHECK-NEXT: call void @llvm.donothing()
333
- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[TMP1]] to i128
334
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP2]], 0
335
- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]
336
- ; CHECK: 4:
337
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
338
- ; CHECK-NEXT: unreachable
339
- ; CHECK: 5:
325
+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <4 x i32> [[TMP1]], zeroinitializer
326
+ ; CHECK-NEXT: [[TMP5:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>
340
327
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> [[A0:%.*]])
341
- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
328
+ ; CHECK-NEXT: store <4 x i32> [[TMP5]] , ptr @__msan_retval_tls, align 8
342
329
; CHECK-NEXT: ret <4 x i32> [[RES]]
343
330
;
344
331
%res = call <4 x i32 > @llvm.x86.sse2.cvtps2dq (<4 x float > %a0 ) ; <<4 x i32>> [#uses=1]
0 commit comments