xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/vscale.ll (revision 3016c0636fd2df86d2c1dc8e7d49efe77a1bdedf)
121b84928SVitaly Buka; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
221b84928SVitaly Buka; RUN: opt < %s -S -msan-check-access-address=0 -passes="msan" 2>&1 | FileCheck %s
39058ce52SVitaly Buka; RUN: opt < %s -S -msan-check-access-address=0 -passes="msan" -msan-track-origins=2 2>&1 | FileCheck %s --check-prefixes=ORIGIN
421b84928SVitaly Buka
521b84928SVitaly Bukatarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
621b84928SVitaly Bukatarget triple = "x86_64-unknown-linux-gnu"
721b84928SVitaly Buka
821b84928SVitaly Bukadefine void @test_load_store_i32(ptr %a, ptr %b) sanitize_memory {
921b84928SVitaly Buka; CHECK-LABEL: define void @test_load_store_i32(
1021b84928SVitaly Buka; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0:[0-9]+]] {
1121b84928SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
1221b84928SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load <vscale x 4 x i32>, ptr [[A]], align 16
1321b84928SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
1421b84928SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
1521b84928SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
1621b84928SVitaly Buka; CHECK-NEXT:    [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP4]], align 16
1721b84928SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[B]] to i64
1821b84928SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
1921b84928SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
2021b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 4 x i32> [[_MSLD]], ptr [[TMP7]], align 16
2121b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 4 x i32> [[TMP1]], ptr [[B]], align 16
2221b84928SVitaly Buka; CHECK-NEXT:    ret void
2321b84928SVitaly Buka;
249058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_load_store_i32(
259058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0:[0-9]+]] {
269058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
279058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load <vscale x 4 x i32>, ptr [[A]], align 16
289058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
299058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
309058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
319058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
329058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
339058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP4]], align 16
349058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 16
359058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = ptrtoint ptr [[B]] to i64
369058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = xor i64 [[TMP8]], 87960930222080
379058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr
389058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP11:%.*]] = add i64 [[TMP9]], 17592186044416
399058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
409058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 4 x i32> [[_MSLD]], ptr [[TMP10]], align 16
419058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP13:%.*]] = call i32 @llvm.vector.reduce.or.nxv4i32(<vscale x 4 x i32> [[_MSLD]])
429058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP13]], 0
439058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP14:%.*]], label [[TMP21:%.*]], !prof [[PROF0:![0-9]+]]
449058ce52SVitaly Buka; ORIGIN:       14:
459058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP15:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP7]])
46*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP16:%.*]] = call i64 @llvm.vscale.i64()
47*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP17:%.*]] = mul i64 [[TMP16]], 16
48*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP18:%.*]] = add i64 [[TMP17]], 3
49*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP19:%.*]] = udiv i64 [[TMP18]], 4
509058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[DOTSPLIT:%.*]]
519058ce52SVitaly Buka; ORIGIN:       .split:
52*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[TMP14]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
53*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP20:%.*]] = getelementptr i32, ptr [[TMP12]], i64 [[IV]]
549058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP15]], ptr [[TMP20]], align 4
55*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
56*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP19]]
579058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
589058ce52SVitaly Buka; ORIGIN:       .split.split:
599058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[TMP21]]
609058ce52SVitaly Buka; ORIGIN:       21:
619058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 4 x i32> [[TMP1]], ptr [[B]], align 16
629058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
639058ce52SVitaly Buka;
6421b84928SVitaly Buka  %1 = load <vscale x 4 x i32>, ptr %a
6521b84928SVitaly Buka  store <vscale x 4 x i32> %1, ptr %b
6621b84928SVitaly Buka  ret void
6721b84928SVitaly Buka}
6821b84928SVitaly Buka
6921b84928SVitaly Bukadefine void @test_load_store_add_int(ptr %a, ptr %b) sanitize_memory {
7021b84928SVitaly Buka; CHECK-LABEL: define void @test_load_store_add_int(
7121b84928SVitaly Buka; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
7221b84928SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
7321b84928SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load <vscale x 8 x i64>, ptr [[A]], align 64
7421b84928SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
7521b84928SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
7621b84928SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
7721b84928SVitaly Buka; CHECK-NEXT:    [[_MSLD:%.*]] = load <vscale x 8 x i64>, ptr [[TMP4]], align 64
7821b84928SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <vscale x 8 x i64>, ptr [[B]], align 64
7921b84928SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[B]] to i64
8021b84928SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 87960930222080
8121b84928SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr
8221b84928SVitaly Buka; CHECK-NEXT:    [[_MSLD1:%.*]] = load <vscale x 8 x i64>, ptr [[TMP8]], align 64
8321b84928SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = or <vscale x 8 x i64> [[_MSLD]], [[_MSLD1]]
8421b84928SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = add <vscale x 8 x i64> [[TMP1]], [[TMP5]]
8521b84928SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
8621b84928SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 87960930222080
8721b84928SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
8821b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 8 x i64> [[_MSLD1]], ptr [[TMP12]], align 64
8921b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 8 x i64> [[TMP5]], ptr [[B]], align 64
9021b84928SVitaly Buka; CHECK-NEXT:    ret void
9121b84928SVitaly Buka;
929058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_load_store_add_int(
939058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
949058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
959058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load <vscale x 8 x i64>, ptr [[A]], align 64
969058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
979058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
989058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
999058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
1009058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
1019058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD:%.*]] = load <vscale x 8 x i64>, ptr [[TMP4]], align 64
1029058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 64
1039058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = load <vscale x 8 x i64>, ptr [[B]], align 64
1049058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = ptrtoint ptr [[B]] to i64
1059058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = xor i64 [[TMP9]], 87960930222080
1069058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr
1079058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP12:%.*]] = add i64 [[TMP10]], 17592186044416
1089058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP13:%.*]] = inttoptr i64 [[TMP12]] to ptr
1099058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD1:%.*]] = load <vscale x 8 x i64>, ptr [[TMP11]], align 64
1109058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 64
1119058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSPROP:%.*]] = or <vscale x 8 x i64> [[_MSLD]], [[_MSLD1]]
1129058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP15:%.*]] = call i64 @llvm.vector.reduce.or.nxv8i64(<vscale x 8 x i64> [[_MSLD1]])
1139058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP16:%.*]] = icmp ne i64 [[TMP15]], 0
1149058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP17:%.*]] = select i1 [[TMP16]], i32 [[TMP14]], i32 [[TMP7]]
1159058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP18:%.*]] = add <vscale x 8 x i64> [[TMP1]], [[TMP8]]
1169058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP19:%.*]] = ptrtoint ptr [[B]] to i64
1179058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP20:%.*]] = xor i64 [[TMP19]], 87960930222080
1189058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP21:%.*]] = inttoptr i64 [[TMP20]] to ptr
1199058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP22:%.*]] = add i64 [[TMP20]], 17592186044416
1209058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP23:%.*]] = inttoptr i64 [[TMP22]] to ptr
1219058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 8 x i64> [[_MSLD1]], ptr [[TMP21]], align 64
1229058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP24:%.*]] = call i64 @llvm.vector.reduce.or.nxv8i64(<vscale x 8 x i64> [[_MSLD1]])
1239058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP24]], 0
1249058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP25:%.*]], label [[TMP32:%.*]], !prof [[PROF0]]
1259058ce52SVitaly Buka; ORIGIN:       25:
1269058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP26:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP14]])
127*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP27:%.*]] = call i64 @llvm.vscale.i64()
128*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP28:%.*]] = mul i64 [[TMP27]], 64
129*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP29:%.*]] = add i64 [[TMP28]], 3
130*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP30:%.*]] = udiv i64 [[TMP29]], 4
1319058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[DOTSPLIT:%.*]]
1329058ce52SVitaly Buka; ORIGIN:       .split:
133*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[TMP25]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
134*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP31:%.*]] = getelementptr i32, ptr [[TMP23]], i64 [[IV]]
1359058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP26]], ptr [[TMP31]], align 4
136*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
137*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP30]]
1389058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
1399058ce52SVitaly Buka; ORIGIN:       .split.split:
1409058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[TMP32]]
1419058ce52SVitaly Buka; ORIGIN:       32:
1429058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 8 x i64> [[TMP8]], ptr [[B]], align 64
1439058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
1449058ce52SVitaly Buka;
14521b84928SVitaly Buka  %1 = load <vscale x 8 x i64>, ptr %a
14621b84928SVitaly Buka  %2 = load <vscale x 8 x i64>, ptr %b
14721b84928SVitaly Buka  %3 = add <vscale x 8 x i64> %1, %2
14821b84928SVitaly Buka  store <vscale x 8 x i64> %2, ptr %b
14921b84928SVitaly Buka  ret void
15021b84928SVitaly Buka}
15121b84928SVitaly Buka
15221b84928SVitaly Bukadefine void @test_load_store_float(ptr %a, ptr %b) sanitize_memory {
15321b84928SVitaly Buka; CHECK-LABEL: define void @test_load_store_float(
15421b84928SVitaly Buka; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
15521b84928SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
15621b84928SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load <vscale x 4 x float>, ptr [[A]], align 16
15721b84928SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
15821b84928SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
15921b84928SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
16021b84928SVitaly Buka; CHECK-NEXT:    [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP4]], align 16
16121b84928SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[B]] to i64
16221b84928SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
16321b84928SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
16421b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 4 x i32> [[_MSLD]], ptr [[TMP7]], align 16
16521b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 4 x float> [[TMP1]], ptr [[B]], align 16
16621b84928SVitaly Buka; CHECK-NEXT:    ret void
16721b84928SVitaly Buka;
1689058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_load_store_float(
1699058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
1709058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
1719058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load <vscale x 4 x float>, ptr [[A]], align 16
1729058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
1739058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
1749058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
1759058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
1769058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
1779058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP4]], align 16
1789058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 16
1799058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = ptrtoint ptr [[B]] to i64
1809058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = xor i64 [[TMP8]], 87960930222080
1819058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = inttoptr i64 [[TMP9]] to ptr
1829058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP11:%.*]] = add i64 [[TMP9]], 17592186044416
1839058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
1849058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 4 x i32> [[_MSLD]], ptr [[TMP10]], align 16
1859058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP13:%.*]] = call i32 @llvm.vector.reduce.or.nxv4i32(<vscale x 4 x i32> [[_MSLD]])
1869058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP13]], 0
1879058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP14:%.*]], label [[TMP21:%.*]], !prof [[PROF0]]
1889058ce52SVitaly Buka; ORIGIN:       14:
1899058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP15:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP7]])
190*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP16:%.*]] = call i64 @llvm.vscale.i64()
191*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP17:%.*]] = mul i64 [[TMP16]], 16
192*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP18:%.*]] = add i64 [[TMP17]], 3
193*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP19:%.*]] = udiv i64 [[TMP18]], 4
1949058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[DOTSPLIT:%.*]]
1959058ce52SVitaly Buka; ORIGIN:       .split:
196*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[TMP14]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
197*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP20:%.*]] = getelementptr i32, ptr [[TMP12]], i64 [[IV]]
1989058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP15]], ptr [[TMP20]], align 4
199*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
200*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP19]]
2019058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
2029058ce52SVitaly Buka; ORIGIN:       .split.split:
2039058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[TMP21]]
2049058ce52SVitaly Buka; ORIGIN:       21:
2059058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 4 x float> [[TMP1]], ptr [[B]], align 16
2069058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
2079058ce52SVitaly Buka;
20821b84928SVitaly Buka  %1 = load <vscale x 4 x float>, ptr %a
20921b84928SVitaly Buka  store <vscale x 4 x float> %1, ptr %b
21021b84928SVitaly Buka  ret void
21121b84928SVitaly Buka}
21221b84928SVitaly Buka
21321b84928SVitaly Bukadefine void @test_load_store_add_float(ptr %a, ptr %b) sanitize_memory {
21421b84928SVitaly Buka; CHECK-LABEL: define void @test_load_store_add_float(
21521b84928SVitaly Buka; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
21621b84928SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
21721b84928SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load <vscale x 2 x float>, ptr [[A]], align 8
21821b84928SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
21921b84928SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
22021b84928SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
22121b84928SVitaly Buka; CHECK-NEXT:    [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP4]], align 8
22221b84928SVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = load <vscale x 2 x float>, ptr [[B]], align 8
22321b84928SVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[B]] to i64
22421b84928SVitaly Buka; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 87960930222080
22521b84928SVitaly Buka; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr
22621b84928SVitaly Buka; CHECK-NEXT:    [[_MSLD1:%.*]] = load <vscale x 2 x i32>, ptr [[TMP8]], align 8
22721b84928SVitaly Buka; CHECK-NEXT:    [[_MSPROP:%.*]] = or <vscale x 2 x i32> [[_MSLD]], [[_MSLD1]]
22821b84928SVitaly Buka; CHECK-NEXT:    [[TMP9:%.*]] = fadd <vscale x 2 x float> [[TMP1]], [[TMP5]]
22921b84928SVitaly Buka; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
23021b84928SVitaly Buka; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 87960930222080
23121b84928SVitaly Buka; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
23221b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 2 x i32> [[_MSLD1]], ptr [[TMP12]], align 8
23321b84928SVitaly Buka; CHECK-NEXT:    store <vscale x 2 x float> [[TMP5]], ptr [[B]], align 8
23421b84928SVitaly Buka; CHECK-NEXT:    ret void
23521b84928SVitaly Buka;
2369058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_load_store_add_float(
2379058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
2389058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
2399058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load <vscale x 2 x float>, ptr [[A]], align 8
2409058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
2419058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
2429058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
2439058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
2449058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
2459058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP4]], align 8
2469058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 8
2479058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = load <vscale x 2 x float>, ptr [[B]], align 8
2489058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = ptrtoint ptr [[B]] to i64
2499058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = xor i64 [[TMP9]], 87960930222080
2509058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP11:%.*]] = inttoptr i64 [[TMP10]] to ptr
2519058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP12:%.*]] = add i64 [[TMP10]], 17592186044416
2529058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP13:%.*]] = inttoptr i64 [[TMP12]] to ptr
2539058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD1:%.*]] = load <vscale x 2 x i32>, ptr [[TMP11]], align 8
2549058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 8
2559058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSPROP:%.*]] = or <vscale x 2 x i32> [[_MSLD]], [[_MSLD1]]
2569058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP15:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> [[_MSLD1]])
2579058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP16:%.*]] = icmp ne i32 [[TMP15]], 0
2589058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP17:%.*]] = select i1 [[TMP16]], i32 [[TMP14]], i32 [[TMP7]]
2599058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP18:%.*]] = fadd <vscale x 2 x float> [[TMP1]], [[TMP8]]
2609058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP19:%.*]] = ptrtoint ptr [[B]] to i64
2619058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP20:%.*]] = xor i64 [[TMP19]], 87960930222080
2629058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP21:%.*]] = inttoptr i64 [[TMP20]] to ptr
2639058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP22:%.*]] = add i64 [[TMP20]], 17592186044416
2649058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP23:%.*]] = inttoptr i64 [[TMP22]] to ptr
2659058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x i32> [[_MSLD1]], ptr [[TMP21]], align 8
2669058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP24:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> [[_MSLD1]])
2679058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP24]], 0
2689058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP25:%.*]], label [[TMP32:%.*]], !prof [[PROF0]]
2699058ce52SVitaly Buka; ORIGIN:       25:
2709058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP26:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP14]])
271*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP27:%.*]] = call i64 @llvm.vscale.i64()
272*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP28:%.*]] = mul i64 [[TMP27]], 8
273*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP29:%.*]] = add i64 [[TMP28]], 3
274*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP30:%.*]] = udiv i64 [[TMP29]], 4
2759058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[DOTSPLIT:%.*]]
2769058ce52SVitaly Buka; ORIGIN:       .split:
277*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[TMP25]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
278*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP31:%.*]] = getelementptr i32, ptr [[TMP23]], i64 [[IV]]
2799058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP26]], ptr [[TMP31]], align 4
280*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
281*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP30]]
2829058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
2839058ce52SVitaly Buka; ORIGIN:       .split.split:
2849058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[TMP32]]
2859058ce52SVitaly Buka; ORIGIN:       32:
2869058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x float> [[TMP8]], ptr [[B]], align 8
2879058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
2889058ce52SVitaly Buka;
28921b84928SVitaly Buka  %1 = load <vscale x 2 x float>, ptr %a
29021b84928SVitaly Buka  %2 = load <vscale x 2 x float>, ptr %b
29121b84928SVitaly Buka  %3 = fadd <vscale x 2 x float> %1, %2
29221b84928SVitaly Buka  store <vscale x 2 x float> %2, ptr %b
29321b84928SVitaly Buka  ret void
29421b84928SVitaly Buka}
2958cf0f9abSVitaly Buka
2968cf0f9abSVitaly Bukadefine <vscale x 2 x float> @fn_ret(ptr %a) sanitize_memory {
2978cf0f9abSVitaly Buka; CHECK-LABEL: define <vscale x 2 x float> @fn_ret(
2988cf0f9abSVitaly Buka; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
2998cf0f9abSVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3008cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load <vscale x 2 x float>, ptr [[A]], align 8
3018cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
3028cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
3038cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
3048cf0f9abSVitaly Buka; CHECK-NEXT:    [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP4]], align 8
3058cf0f9abSVitaly Buka; CHECK-NEXT:    store <vscale x 2 x i32> [[_MSLD]], ptr @__msan_retval_tls, align 8
3068cf0f9abSVitaly Buka; CHECK-NEXT:    ret <vscale x 2 x float> [[TMP1]]
3078cf0f9abSVitaly Buka;
3089058ce52SVitaly Buka; ORIGIN-LABEL: define <vscale x 2 x float> @fn_ret(
3099058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
3109058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
3119058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load <vscale x 2 x float>, ptr [[A]], align 8
3129058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
3139058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
3149058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
3159058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
3169058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
3179058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP4]], align 8
3189058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 8
3199058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x i32> [[_MSLD]], ptr @__msan_retval_tls, align 8
3209058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP7]], ptr @__msan_retval_origin_tls, align 4
3219058ce52SVitaly Buka; ORIGIN-NEXT:    ret <vscale x 2 x float> [[TMP1]]
3229058ce52SVitaly Buka;
3238cf0f9abSVitaly Buka  %1 = load <vscale x 2 x float>, ptr %a
3248cf0f9abSVitaly Buka  ret <vscale x 2 x float> %1
3258cf0f9abSVitaly Buka}
3268cf0f9abSVitaly Buka
3278cf0f9abSVitaly Bukadefine void @test_ret(ptr %a, ptr %b) sanitize_memory {
3288cf0f9abSVitaly Buka; CHECK-LABEL: define void @test_ret(
3298cf0f9abSVitaly Buka; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
3308cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
3318cf0f9abSVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3328cf0f9abSVitaly Buka; CHECK-NEXT:    store i64 [[TMP1]], ptr @__msan_param_tls, align 8
3338cf0f9abSVitaly Buka; CHECK-NEXT:    store <vscale x 2 x i32> zeroinitializer, ptr @__msan_retval_tls, align 8
3348cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = call <vscale x 2 x float> @fn_ret(ptr [[A]])
3358cf0f9abSVitaly Buka; CHECK-NEXT:    [[_MSRET:%.*]] = load <vscale x 2 x i32>, ptr @__msan_retval_tls, align 8
3368cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[B]] to i64
3378cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
3388cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
3398cf0f9abSVitaly Buka; CHECK-NEXT:    store <vscale x 2 x i32> [[_MSRET]], ptr [[TMP4]], align 8
3408cf0f9abSVitaly Buka; CHECK-NEXT:    store <vscale x 2 x float> [[TMP5]], ptr [[B]], align 8
3418cf0f9abSVitaly Buka; CHECK-NEXT:    ret void
3428cf0f9abSVitaly Buka;
3439058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_ret(
3449058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
3459058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
3469058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4
3479058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
3489058ce52SVitaly Buka; ORIGIN-NEXT:    store i64 [[TMP1]], ptr @__msan_param_tls, align 8
3499058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP2]], ptr @__msan_param_origin_tls, align 4
3509058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x i32> zeroinitializer, ptr @__msan_retval_tls, align 8
3519058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = call <vscale x 2 x float> @fn_ret(ptr [[A]])
3529058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSRET:%.*]] = load <vscale x 2 x i32>, ptr @__msan_retval_tls, align 8
3539058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = load i32, ptr @__msan_retval_origin_tls, align 4
3549058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[B]] to i64
3559058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
3569058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
3579058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = add i64 [[TMP6]], 17592186044416
3589058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr
3599058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x i32> [[_MSRET]], ptr [[TMP7]], align 8
3609058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> [[_MSRET]])
3619058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP10]], 0
3629058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP11:%.*]], label [[TMP18:%.*]], !prof [[PROF0]]
3639058ce52SVitaly Buka; ORIGIN:       11:
3649058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP12:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP4]])
365*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP13:%.*]] = call i64 @llvm.vscale.i64()
366*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP14:%.*]] = mul i64 [[TMP13]], 8
367*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP15:%.*]] = add i64 [[TMP14]], 3
368*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP16:%.*]] = udiv i64 [[TMP15]], 4
3699058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[DOTSPLIT:%.*]]
3709058ce52SVitaly Buka; ORIGIN:       .split:
371*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[TMP11]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
372*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP17:%.*]] = getelementptr i32, ptr [[TMP9]], i64 [[IV]]
3739058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP12]], ptr [[TMP17]], align 4
374*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
375*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP16]]
3769058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
3779058ce52SVitaly Buka; ORIGIN:       .split.split:
3789058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[TMP18]]
3799058ce52SVitaly Buka; ORIGIN:       18:
3809058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x float> [[TMP3]], ptr [[B]], align 8
3819058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
3829058ce52SVitaly Buka;
3838cf0f9abSVitaly Buka  %1 = call <vscale x 2 x float> @fn_ret(ptr %a)
3848cf0f9abSVitaly Buka  store <vscale x 2 x float> %1, ptr %b
3858cf0f9abSVitaly Buka  ret void
3868cf0f9abSVitaly Buka}
3878cf0f9abSVitaly Buka
3888cf0f9abSVitaly Bukadefine void @fn_param(<vscale x 2 x float> %a, ptr %b) sanitize_memory {
3898cf0f9abSVitaly Buka; CHECK-LABEL: define void @fn_param(
3908cf0f9abSVitaly Buka; CHECK-SAME: <vscale x 2 x float> [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
3918cf0f9abSVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
3928cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[B]] to i64
3938cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
3948cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
3958cf0f9abSVitaly Buka; CHECK-NEXT:    store <vscale x 2 x i32> zeroinitializer, ptr [[TMP3]], align 8
3968cf0f9abSVitaly Buka; CHECK-NEXT:    store <vscale x 2 x float> [[A]], ptr [[B]], align 8
3978cf0f9abSVitaly Buka; CHECK-NEXT:    ret void
3988cf0f9abSVitaly Buka;
3999058ce52SVitaly Buka; ORIGIN-LABEL: define void @fn_param(
4009058ce52SVitaly Buka; ORIGIN-SAME: <vscale x 2 x float> [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
4019058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
4029058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[B]] to i64
4039058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
4049058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
4059058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
4069058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
4079058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x i32> zeroinitializer, ptr [[TMP3]], align 8
4089058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> zeroinitializer)
4099058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
4109058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP14:%.*]], !prof [[PROF0]]
4119058ce52SVitaly Buka; ORIGIN:       7:
4129058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = call i32 @__msan_chain_origin(i32 0)
413*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = call i64 @llvm.vscale.i64()
414*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = mul i64 [[TMP9]], 8
415*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP11:%.*]] = add i64 [[TMP10]], 3
416*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP12:%.*]] = udiv i64 [[TMP11]], 4
4179058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[DOTSPLIT:%.*]]
4189058ce52SVitaly Buka; ORIGIN:       .split:
419*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV:%.*]] = phi i64 [ 0, [[TMP7]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
420*3016c063SVitaly Buka; ORIGIN-NEXT:    [[TMP13:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[IV]]
4219058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP8]], ptr [[TMP13]], align 4
422*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
423*3016c063SVitaly Buka; ORIGIN-NEXT:    [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP12]]
4249058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
4259058ce52SVitaly Buka; ORIGIN:       .split.split:
4269058ce52SVitaly Buka; ORIGIN-NEXT:    br label [[TMP14]]
4279058ce52SVitaly Buka; ORIGIN:       14:
4289058ce52SVitaly Buka; ORIGIN-NEXT:    store <vscale x 2 x float> [[A]], ptr [[B]], align 8
4299058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
4309058ce52SVitaly Buka;
4318cf0f9abSVitaly Buka  store <vscale x 2 x float> %a, ptr %b
4328cf0f9abSVitaly Buka  ret void
4338cf0f9abSVitaly Buka}
4348cf0f9abSVitaly Buka
4358cf0f9abSVitaly Bukadefine void @test_param(ptr %a, ptr %b) sanitize_memory {
4368cf0f9abSVitaly Buka; CHECK-LABEL: define void @test_param(
4378cf0f9abSVitaly Buka; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
4388cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
4398cf0f9abSVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
4408cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = load <vscale x 2 x float>, ptr [[A]], align 8
4418cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[A]] to i64
4428cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 87960930222080
4438cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
4448cf0f9abSVitaly Buka; CHECK-NEXT:    [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP5]], align 8
4458cf0f9abSVitaly Buka; CHECK-NEXT:    store i64 [[TMP1]], ptr @__msan_param_tls, align 8
4468cf0f9abSVitaly Buka; CHECK-NEXT:    [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> [[_MSLD]])
4478cf0f9abSVitaly Buka; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
4488cf0f9abSVitaly Buka; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF0:![0-9]+]]
4498cf0f9abSVitaly Buka; CHECK:       7:
45083fdcf23SVitaly Buka; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5:[0-9]+]]
4518cf0f9abSVitaly Buka; CHECK-NEXT:    unreachable
4528cf0f9abSVitaly Buka; CHECK:       8:
4538cf0f9abSVitaly Buka; CHECK-NEXT:    call void @fn_param(<vscale x 2 x float> [[TMP2]], ptr [[B]])
4548cf0f9abSVitaly Buka; CHECK-NEXT:    ret void
4558cf0f9abSVitaly Buka;
4569058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_param(
4579058ce52SVitaly Buka; ORIGIN-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
4589058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
4599058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = load i32, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_origin_tls to i64), i64 8) to ptr), align 4
4609058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
4619058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = load <vscale x 2 x float>, ptr [[A]], align 8
4629058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
4639058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
4649058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
4659058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = add i64 [[TMP5]], 17592186044416
4669058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr
4679058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP6]], align 8
4689058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 8
4699058ce52SVitaly Buka; ORIGIN-NEXT:    store i64 [[TMP1]], ptr @__msan_param_tls, align 8
4709058ce52SVitaly Buka; ORIGIN-NEXT:    store i32 [[TMP2]], ptr @__msan_param_origin_tls, align 4
4719058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP10:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> [[_MSLD]])
4729058ce52SVitaly Buka; ORIGIN-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP10]], 0
4739058ce52SVitaly Buka; ORIGIN-NEXT:    br i1 [[_MSCMP]], label [[TMP11:%.*]], label [[TMP12:%.*]], !prof [[PROF0]]
4749058ce52SVitaly Buka; ORIGIN:       11:
4759058ce52SVitaly Buka; ORIGIN-NEXT:    call void @__msan_warning_with_origin_noreturn(i32 [[TMP9]]) #[[ATTR5:[0-9]+]]
4769058ce52SVitaly Buka; ORIGIN-NEXT:    unreachable
4779058ce52SVitaly Buka; ORIGIN:       12:
4789058ce52SVitaly Buka; ORIGIN-NEXT:    call void @fn_param(<vscale x 2 x float> [[TMP3]], ptr [[B]])
4799058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
4809058ce52SVitaly Buka;
4818cf0f9abSVitaly Buka  %1 = load <vscale x 2 x float>, ptr %a
4828cf0f9abSVitaly Buka  call void @fn_param(<vscale x 2 x float> %1, ptr %b)
4838cf0f9abSVitaly Buka  ret void
4848cf0f9abSVitaly Buka}
48583fdcf23SVitaly Buka
48683fdcf23SVitaly Bukadefine void @test_alloca1() sanitize_memory {
48783fdcf23SVitaly Buka; CHECK-LABEL: define void @test_alloca1(
48883fdcf23SVitaly Buka; CHECK-SAME: ) #[[ATTR0]] {
48983fdcf23SVitaly Buka; CHECK-NEXT:  entry:
49083fdcf23SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
49183fdcf23SVitaly Buka; CHECK-NEXT:    [[X:%.*]] = alloca <vscale x 64 x i1>, align 4
49283fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
49383fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[TMP0]], 8
49483fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[X]] to i64
49583fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
49683fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
49783fdcf23SVitaly Buka; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[TMP4]], i8 -1, i64 [[TMP1]], i1 false)
49883fdcf23SVitaly Buka; CHECK-NEXT:    ret void
49983fdcf23SVitaly Buka;
5009058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_alloca1(
5019058ce52SVitaly Buka; ORIGIN-SAME: ) #[[ATTR0]] {
5029058ce52SVitaly Buka; ORIGIN-NEXT:  entry:
5039058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
5049058ce52SVitaly Buka; ORIGIN-NEXT:    [[X:%.*]] = alloca <vscale x 64 x i1>, align 4
5059058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
5069058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = mul i64 [[TMP0]], 8
5079058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[X]] to i64
5089058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
5099058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
5109058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
5119058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = and i64 [[TMP5]], -4
5129058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
5139058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[TMP4]], i8 -1, i64 [[TMP1]], i1 false)
5149058ce52SVitaly Buka; ORIGIN-NEXT:    call void @__msan_set_alloca_origin_with_descr(ptr [[X]], i64 [[TMP1]], ptr @[[GLOB0:[0-9]+]], ptr @[[GLOB1:[0-9]+]])
5159058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
5169058ce52SVitaly Buka;
51783fdcf23SVitaly Bukaentry:
51883fdcf23SVitaly Buka  %x = alloca <vscale x 64 x i1>, align 4
51983fdcf23SVitaly Buka  ret void
52083fdcf23SVitaly Buka}
52183fdcf23SVitaly Buka
52283fdcf23SVitaly Bukadefine void @test_alloca2() sanitize_memory {
52383fdcf23SVitaly Buka; CHECK-LABEL: define void @test_alloca2(
52483fdcf23SVitaly Buka; CHECK-SAME: ) #[[ATTR0]] {
52583fdcf23SVitaly Buka; CHECK-NEXT:  entry:
52683fdcf23SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
52783fdcf23SVitaly Buka; CHECK-NEXT:    [[X:%.*]] = alloca <vscale x 64 x double>, align 4
52883fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
52983fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[TMP0]], 512
53083fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[X]] to i64
53183fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
53283fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
53383fdcf23SVitaly Buka; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[TMP4]], i8 -1, i64 [[TMP1]], i1 false)
53483fdcf23SVitaly Buka; CHECK-NEXT:    ret void
53583fdcf23SVitaly Buka;
5369058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_alloca2(
5379058ce52SVitaly Buka; ORIGIN-SAME: ) #[[ATTR0]] {
5389058ce52SVitaly Buka; ORIGIN-NEXT:  entry:
5399058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
5409058ce52SVitaly Buka; ORIGIN-NEXT:    [[X:%.*]] = alloca <vscale x 64 x double>, align 4
5419058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
5429058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = mul i64 [[TMP0]], 512
5439058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[X]] to i64
5449058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
5459058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
5469058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
5479058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = and i64 [[TMP5]], -4
5489058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
5499058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[TMP4]], i8 -1, i64 [[TMP1]], i1 false)
5509058ce52SVitaly Buka; ORIGIN-NEXT:    call void @__msan_set_alloca_origin_with_descr(ptr [[X]], i64 [[TMP1]], ptr @[[GLOB2:[0-9]+]], ptr @[[GLOB3:[0-9]+]])
5519058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
5529058ce52SVitaly Buka;
55383fdcf23SVitaly Bukaentry:
55483fdcf23SVitaly Buka  %x = alloca <vscale x 64 x double>, align 4
55583fdcf23SVitaly Buka  ret void
55683fdcf23SVitaly Buka}
55783fdcf23SVitaly Buka
55883fdcf23SVitaly Bukadefine void @test_alloca3() sanitize_memory {
55983fdcf23SVitaly Buka; CHECK-LABEL: define void @test_alloca3(
56083fdcf23SVitaly Buka; CHECK-SAME: ) #[[ATTR0]] {
56183fdcf23SVitaly Buka; CHECK-NEXT:  entry:
56283fdcf23SVitaly Buka; CHECK-NEXT:    call void @llvm.donothing()
56383fdcf23SVitaly Buka; CHECK-NEXT:    [[X:%.*]] = alloca <vscale x 1 x i1>, align 4
56483fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
56583fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[X]] to i64
56683fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
56783fdcf23SVitaly Buka; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
56883fdcf23SVitaly Buka; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[TMP3]], i8 -1, i64 [[TMP0]], i1 false)
56983fdcf23SVitaly Buka; CHECK-NEXT:    ret void
57083fdcf23SVitaly Buka;
5719058ce52SVitaly Buka; ORIGIN-LABEL: define void @test_alloca3(
5729058ce52SVitaly Buka; ORIGIN-SAME: ) #[[ATTR0]] {
5739058ce52SVitaly Buka; ORIGIN-NEXT:  entry:
5749058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.donothing()
5759058ce52SVitaly Buka; ORIGIN-NEXT:    [[X:%.*]] = alloca <vscale x 1 x i1>, align 4
5769058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
5779058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[X]] to i64
5789058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
5799058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
5809058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
5819058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP5:%.*]] = and i64 [[TMP4]], -4
5829058ce52SVitaly Buka; ORIGIN-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
5839058ce52SVitaly Buka; ORIGIN-NEXT:    call void @llvm.memset.p0.i64(ptr align 4 [[TMP3]], i8 -1, i64 [[TMP0]], i1 false)
5849058ce52SVitaly Buka; ORIGIN-NEXT:    call void @__msan_set_alloca_origin_with_descr(ptr [[X]], i64 [[TMP0]], ptr @[[GLOB4:[0-9]+]], ptr @[[GLOB5:[0-9]+]])
5859058ce52SVitaly Buka; ORIGIN-NEXT:    ret void
5869058ce52SVitaly Buka;
58783fdcf23SVitaly Bukaentry:
58883fdcf23SVitaly Buka  %x = alloca <vscale x 1 x i1>, align 4
58983fdcf23SVitaly Buka  ret void
59083fdcf23SVitaly Buka}
59183fdcf23SVitaly Buka
5928cf0f9abSVitaly Buka;.
5938cf0f9abSVitaly Buka; CHECK: [[PROF0]] = !{!"branch_weights", i32 1, i32 1048575}
5948cf0f9abSVitaly Buka;.
5959058ce52SVitaly Buka; ORIGIN: [[PROF0]] = !{!"branch_weights", i32 1, i32 1048575}
5969058ce52SVitaly Buka;.
597