@@ -455,15 +455,11 @@ define <4 x i32> @test_x86_sse2_cvttpd2dq(<2 x double> %a0) #0 {
455455; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
456456; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
457457; CHECK-NEXT: call void @llvm.donothing()
458- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to i128
459- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP2]], 0
460- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]
461- ; CHECK: 4:
462- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
463- ; CHECK-NEXT: unreachable
464- ; CHECK: 5:
458+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer
459+ ; CHECK-NEXT: [[TMP6:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>
460+ ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <2 x i32> [[TMP6]], <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
465461; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double> [[A0:%.*]])
466- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
462+ ; CHECK-NEXT: store <4 x i32> [[TMP5]] , ptr @__msan_retval_tls, align 8
467463; CHECK-NEXT: ret <4 x i32> [[RES]]
468464;
469465 %res = call <4 x i32 > @llvm.x86.sse2.cvttpd2dq (<2 x double > %a0 ) ; <<4 x i32>> [#uses=1]
@@ -477,18 +473,16 @@ define <2 x i64> @test_mm_cvttpd_epi32_zext(<2 x double> %a0) nounwind #0 {
477473; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
478474; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
479475; CHECK-NEXT: call void @llvm.donothing()
480- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <2 x i64> [[TMP1]] to i128
481- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP2]], 0
482- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]
483- ; CHECK: 4:
484- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
485- ; CHECK-NEXT: unreachable
486- ; CHECK: 5:
476+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer
477+ ; CHECK-NEXT: [[TMP6:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i32>
478+ ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <2 x i32> [[TMP6]], <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
487479; CHECK-NEXT: [[CVT:%.*]] = call <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double> [[A0:%.*]])
488- ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
480+ ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[TMP5]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
481+ ; CHECK-NEXT: [[RES1:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
489482; CHECK-NEXT: [[BC:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64>
490- ; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
491- ; CHECK-NEXT: ret <2 x i64> [[BC]]
483+ ; CHECK-NEXT: [[BC1:%.*]] = bitcast <4 x i32> [[RES1]] to <2 x i64>
484+ ; CHECK-NEXT: store <2 x i64> [[BC]], ptr @__msan_retval_tls, align 8
485+ ; CHECK-NEXT: ret <2 x i64> [[BC1]]
492486;
493487 %cvt = call <4 x i32 > @llvm.x86.sse2.cvttpd2dq (<2 x double > %a0 )
494488 %res = shufflevector <4 x i32 > %cvt , <4 x i32 > zeroinitializer , <4 x i32 > <i32 0 , i32 1 , i32 4 , i32 5 >
@@ -503,7 +497,7 @@ define <2 x i64> @test_mm_cvttpd_epi32_zext_load(ptr %p0) nounwind #0 {
503497; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
504498; CHECK-NEXT: call void @llvm.donothing()
505499; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
506- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP8 :%.*]], !prof [[PROF1]]
500+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP7 :%.*]], !prof [[PROF1]]
507501; CHECK: 3:
508502; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
509503; CHECK-NEXT: unreachable
@@ -513,18 +507,16 @@ define <2 x i64> @test_mm_cvttpd_epi32_zext_load(ptr %p0) nounwind #0 {
513507; CHECK-NEXT: [[TMP5:%.*]] = and i64 [[TMP4]], -2147483649
514508; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
515509; CHECK-NEXT: [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
516- ; CHECK-NEXT: [[TMP7:%.*]] = bitcast <2 x i64> [[_MSLD]] to i128
517- ; CHECK-NEXT: [[_MSCMP1:%.*]] = icmp ne i128 [[TMP7]], 0
518- ; CHECK-NEXT: br i1 [[_MSCMP1]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]
519- ; CHECK: 9:
520- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
521- ; CHECK-NEXT: unreachable
522- ; CHECK: 10:
510+ ; CHECK-NEXT: [[TMP8:%.*]] = icmp ne <2 x i64> [[_MSLD]], zeroinitializer
511+ ; CHECK-NEXT: [[TMP9:%.*]] = sext <2 x i1> [[TMP8]] to <2 x i32>
512+ ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x i32> [[TMP9]], <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
523513; CHECK-NEXT: [[CVT:%.*]] = call <4 x i32> @llvm.x86.sse2.cvttpd2dq(<2 x double> [[A0]])
524- ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
514+ ; CHECK-NEXT: [[RES:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
515+ ; CHECK-NEXT: [[RES1:%.*]] = shufflevector <4 x i32> [[CVT]], <4 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
525516; CHECK-NEXT: [[BC:%.*]] = bitcast <4 x i32> [[RES]] to <2 x i64>
526- ; CHECK-NEXT: store <2 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
527- ; CHECK-NEXT: ret <2 x i64> [[BC]]
517+ ; CHECK-NEXT: [[BC1:%.*]] = bitcast <4 x i32> [[RES1]] to <2 x i64>
518+ ; CHECK-NEXT: store <2 x i64> [[BC]], ptr @__msan_retval_tls, align 8
519+ ; CHECK-NEXT: ret <2 x i64> [[BC1]]
528520;
529521 %a0 = load <2 x double >, ptr %p0
530522 %cvt = call <4 x i32 > @llvm.x86.sse2.cvttpd2dq (<2 x double > %a0 )
@@ -539,15 +531,10 @@ define <4 x i32> @test_x86_sse2_cvttps2dq(<4 x float> %a0) #0 {
539531; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
540532; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
541533; CHECK-NEXT: call void @llvm.donothing()
542- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <4 x i32> [[TMP1]] to i128
543- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP2]], 0
544- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP6:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]
545- ; CHECK: 4:
546- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR5]]
547- ; CHECK-NEXT: unreachable
548- ; CHECK: 5:
534+ ; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <4 x i32> [[TMP1]], zeroinitializer
535+ ; CHECK-NEXT: [[TMP5:%.*]] = sext <4 x i1> [[TMP3]] to <4 x i32>
549536; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> [[A0:%.*]])
550- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
537+ ; CHECK-NEXT: store <4 x i32> [[TMP5]] , ptr @__msan_retval_tls, align 8
551538; CHECK-NEXT: ret <4 x i32> [[RES]]
552539;
553540 %res = call <4 x i32 > @llvm.x86.sse2.cvttps2dq (<4 x float > %a0 ) ; <<4 x i32>> [#uses=1]
0 commit comments