1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes
2
2
; 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()
3
15
4
16
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
5
17
target 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 {
303
315
; CHECK-LABEL: @test_x86_avx_cvt_pd2_ps_256(
304
316
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
305
317
; 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>
313
320
; 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
315
322
; CHECK-NEXT: ret <4 x float> [[RES]]
316
323
;
317
324
%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 {
324
331
; CHECK-LABEL: @test_x86_avx_cvt_pd2dq_256(
325
332
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
326
333
; 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>
334
336
; 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
336
338
; CHECK-NEXT: ret <4 x i32> [[RES]]
337
339
;
338
340
%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 {
345
347
; CHECK-LABEL: @test_x86_avx_cvt_ps2dq_256(
346
348
; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @__msan_param_tls, align 8
347
349
; 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>
355
352
; 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
357
354
; CHECK-NEXT: ret <8 x i32> [[RES]]
358
355
;
359
356
%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 {
366
363
; CHECK-LABEL: @test_x86_avx_cvtt_pd2dq_256(
367
364
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i64>, ptr @__msan_param_tls, align 8
368
365
; 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>
376
368
; 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
378
370
; CHECK-NEXT: ret <4 x i32> [[RES]]
379
371
;
380
372
%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 {
387
379
; CHECK-LABEL: @test_x86_avx_cvtt_ps2dq_256(
388
380
; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr @__msan_param_tls, align 8
389
381
; 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>
397
384
; 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
399
386
; CHECK-NEXT: ret <8 x i32> [[RES]]
400
387
;
401
388
%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 {
511
498
; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
512
499
; CHECK-NEXT: [[_MSLD:%.*]] = load <32 x i8>, ptr [[TMP4]], align 1
513
500
; 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]+ ]]
515
502
; CHECK: 5:
516
503
; CHECK-NEXT: call void @__msan_warning_noreturn()
517
504
; CHECK-NEXT: unreachable
0 commit comments