11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes
22; RUN: opt %s -S -passes=msan 2>&1 | FileCheck %s
3+ ;
4+ ; Handled strictly:
5+ ; - i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0)
6+ ; - i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0)
7+ ; - <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> %a1)
8+ ; - <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> %a1)
9+ ; - <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> <i64 2, i64 0, i64 0, i64 2>)
10+ ; - <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a1)
11+ ; - <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> %a2)
12+ ; - <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> %a1)
13+ ; - void @llvm.x86.avx.vzeroall()
14+ ; - void @llvm.x86.avx.vzeroupper()
315
416target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
517target triple = "x86_64-unknown-linux-gnu"
@@ -303,15 +315,10 @@ define <4 x float> @test_x86_avx_cvt_pd2_ps_256(<4 x double> %a0) #0 {
303315; CHECK-LABEL: @test_x86_avx_cvt_pd2_ps_256(
304316; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
305317; CHECK-NEXT: call void @llvm.donothing()
306- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <4 x i64> [[TMP1]] to i256
307- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i256 [[TMP2]], 0
308- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1:![0-9]+]]
309- ; CHECK: 3:
310- ; CHECK-NEXT: call void @__msan_warning_noreturn()
311- ; CHECK-NEXT: unreachable
312- ; CHECK: 4:
318+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne <4 x i64> [[TMP1]], zeroinitializer
319+ ; CHECK-NEXT: [[TMP3:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
313320; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> [[A0:%.*]])
314- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
321+ ; CHECK-NEXT: store <4 x i32> [[TMP3]] , ptr @__msan_retval_tls, align 8
315322; CHECK-NEXT: ret <4 x float> [[RES]]
316323;
317324 %res = call <4 x float > @llvm.x86.avx.cvt.pd2.ps.256 (<4 x double > %a0 ) ; <<4 x float>> [#uses=1]
@@ -324,15 +331,10 @@ define <4 x i32> @test_x86_avx_cvt_pd2dq_256(<4 x double> %a0) #0 {
324331; CHECK-LABEL: @test_x86_avx_cvt_pd2dq_256(
325332; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
326333; CHECK-NEXT: call void @llvm.donothing()
327- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <4 x i64> [[TMP1]] to i256
328- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i256 [[TMP2]], 0
329- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
330- ; CHECK: 3:
331- ; CHECK-NEXT: call void @__msan_warning_noreturn()
332- ; CHECK-NEXT: unreachable
333- ; CHECK: 4:
334+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne <4 x i64> [[TMP1]], zeroinitializer
335+ ; CHECK-NEXT: [[TMP3:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
334336; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> [[A0:%.*]])
335- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
337+ ; CHECK-NEXT: store <4 x i32> [[TMP3]] , ptr @__msan_retval_tls, align 8
336338; CHECK-NEXT: ret <4 x i32> [[RES]]
337339;
338340 %res = call <4 x i32 > @llvm.x86.avx.cvt.pd2dq.256 (<4 x double > %a0 ) ; <<4 x i32>> [#uses=1]
@@ -345,15 +347,10 @@ define <8 x i32> @test_x86_avx_cvt_ps2dq_256(<8 x float> %a0) #0 {
345347; CHECK-LABEL: @test_x86_avx_cvt_ps2dq_256(
346348; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @__msan_param_tls, align 8
347349; CHECK-NEXT: call void @llvm.donothing()
348- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <8 x i32> [[TMP1]] to i256
349- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i256 [[TMP2]], 0
350- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
351- ; CHECK: 3:
352- ; CHECK-NEXT: call void @__msan_warning_noreturn()
353- ; CHECK-NEXT: unreachable
354- ; CHECK: 4:
350+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne <8 x i32> [[TMP1]], zeroinitializer
351+ ; CHECK-NEXT: [[TMP3:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i32>
355352; CHECK-NEXT: [[RES:%.*]] = call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> [[A0:%.*]])
356- ; CHECK-NEXT: store <8 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
353+ ; CHECK-NEXT: store <8 x i32> [[TMP3]] , ptr @__msan_retval_tls, align 8
357354; CHECK-NEXT: ret <8 x i32> [[RES]]
358355;
359356 %res = call <8 x i32 > @llvm.x86.avx.cvt.ps2dq.256 (<8 x float > %a0 ) ; <<8 x i32>> [#uses=1]
@@ -366,15 +363,10 @@ define <4 x i32> @test_x86_avx_cvtt_pd2dq_256(<4 x double> %a0) #0 {
366363; CHECK-LABEL: @test_x86_avx_cvtt_pd2dq_256(
367364; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
368365; CHECK-NEXT: call void @llvm.donothing()
369- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <4 x i64> [[TMP1]] to i256
370- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i256 [[TMP2]], 0
371- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
372- ; CHECK: 3:
373- ; CHECK-NEXT: call void @__msan_warning_noreturn()
374- ; CHECK-NEXT: unreachable
375- ; CHECK: 4:
366+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne <4 x i64> [[TMP1]], zeroinitializer
367+ ; CHECK-NEXT: [[TMP3:%.*]] = sext <4 x i1> [[TMP2]] to <4 x i32>
376368; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> [[A0:%.*]])
377- ; CHECK-NEXT: store <4 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
369+ ; CHECK-NEXT: store <4 x i32> [[TMP3]] , ptr @__msan_retval_tls, align 8
378370; CHECK-NEXT: ret <4 x i32> [[RES]]
379371;
380372 %res = call <4 x i32 > @llvm.x86.avx.cvtt.pd2dq.256 (<4 x double > %a0 ) ; <<4 x i32>> [#uses=1]
@@ -387,15 +379,10 @@ define <8 x i32> @test_x86_avx_cvtt_ps2dq_256(<8 x float> %a0) #0 {
387379; CHECK-LABEL: @test_x86_avx_cvtt_ps2dq_256(
388380; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @__msan_param_tls, align 8
389381; CHECK-NEXT: call void @llvm.donothing()
390- ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <8 x i32> [[TMP1]] to i256
391- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i256 [[TMP2]], 0
392- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
393- ; CHECK: 3:
394- ; CHECK-NEXT: call void @__msan_warning_noreturn()
395- ; CHECK-NEXT: unreachable
396- ; CHECK: 4:
382+ ; CHECK-NEXT: [[TMP2:%.*]] = icmp ne <8 x i32> [[TMP1]], zeroinitializer
383+ ; CHECK-NEXT: [[TMP3:%.*]] = sext <8 x i1> [[TMP2]] to <8 x i32>
397384; CHECK-NEXT: [[RES:%.*]] = call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> [[A0:%.*]])
398- ; CHECK-NEXT: store <8 x i32> zeroinitializer , ptr @__msan_retval_tls, align 8
385+ ; CHECK-NEXT: store <8 x i32> [[TMP3]] , ptr @__msan_retval_tls, align 8
399386; CHECK-NEXT: ret <8 x i32> [[RES]]
400387;
401388 %res = call <8 x i32 > @llvm.x86.avx.cvtt.ps2dq.256 (<8 x float > %a0 ) ; <<8 x i32>> [#uses=1]
@@ -511,7 +498,7 @@ define <32 x i8> @test_x86_avx_ldu_dq_256(ptr %a0) #0 {
511498; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
512499; CHECK-NEXT: [[_MSLD:%.*]] = load <32 x i8>, ptr [[TMP4]], align 1
513500; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
514- ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP5:%.*]], label [[TMP6:%.*]], !prof [[PROF1]]
501+ ; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP5:%.*]], label [[TMP6:%.*]], !prof [[PROF1:![0-9]+ ]]
515502; CHECK: 5:
516503; CHECK-NEXT: call void @__msan_warning_noreturn()
517504; CHECK-NEXT: unreachable
0 commit comments