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