18251754eSk-kashapov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2*d9e2fb70Sk-kashapov; RUN: opt < %s -S -msan-kernel=1 -passes=msan -msan-origin-base=0x40000000 -msan-and-mask=0x80000000 2>&1 | FileCheck %s 3f032622dSk-kashapov 4f032622dSk-kashapovtarget datalayout = "e-m:e-i64:64-n32:64" 5*d9e2fb70Sk-kashapovtarget triple = "powerpcle--linux" 6f032622dSk-kashapov 7f032622dSk-kashapovdefine void @Store1(ptr %p, i8 %x) sanitize_memory { 88251754eSk-kashapov; CHECK-LABEL: define void @Store1( 98251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]], i8 [[X:%.*]]) #[[ATTR0:[0-9]+]] { 108251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 118251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 128251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 138251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 148251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 158251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 168251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 178251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 188251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 198251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 208251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 218251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 228251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 238251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 248251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 258251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 268251754eSk-kashapov; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 278251754eSk-kashapov; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 8 288251754eSk-kashapov; CHECK-NEXT: [[_MSARG1:%.*]] = inttoptr i64 [[TMP8]] to ptr 298251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i8, ptr [[_MSARG1]], align 8 308251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 318251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[TMP10]], 8 328251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O2:%.*]] = inttoptr i64 [[TMP11]] to ptr 338251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = load i32, ptr [[_MSARG_O2]], align 4 348251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 358251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 36debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB12:.*]], label %[[BB13:.*]], !prof [[PROF1:![0-9]+]] 37debfd7b0SVitaly Buka; CHECK: [[BB12]]: 388251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2:[0-9]+]] 39debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB13]] 40debfd7b0SVitaly Buka; CHECK: [[BB13]]: 418251754eSk-kashapov; CHECK-NEXT: [[TMP15:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_1(ptr [[P]]) 428251754eSk-kashapov; CHECK-NEXT: [[TMP16:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 0 438251754eSk-kashapov; CHECK-NEXT: [[TMP17:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 1 448251754eSk-kashapov; CHECK-NEXT: store i8 [[TMP9]], ptr [[TMP16]], align 1 458251754eSk-kashapov; CHECK-NEXT: [[_MSCMP3:%.*]] = icmp ne i8 [[TMP9]], 0 46debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP3]], label %[[BB17:.*]], label %[[BB19:.*]], !prof [[PROF1]] 47debfd7b0SVitaly Buka; CHECK: [[BB17]]: 488251754eSk-kashapov; CHECK-NEXT: [[TMP19:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP12]]) 498251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP19]], ptr [[TMP17]], align 4 50debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB19]] 51debfd7b0SVitaly Buka; CHECK: [[BB19]]: 528251754eSk-kashapov; CHECK-NEXT: store i8 [[X]], ptr [[P]], align 1 538251754eSk-kashapov; CHECK-NEXT: ret void 548251754eSk-kashapov; 55f032622dSk-kashapoventry: 56f032622dSk-kashapov store i8 %x, ptr %p 57f032622dSk-kashapov ret void 58f032622dSk-kashapov} 59f032622dSk-kashapov 60f032622dSk-kashapov 61f032622dSk-kashapovdefine void @Store2(ptr %p, i16 %x) sanitize_memory { 628251754eSk-kashapov; CHECK-LABEL: define void @Store2( 638251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]], i16 [[X:%.*]]) #[[ATTR0]] { 648251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 658251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 668251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 678251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 688251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 698251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 708251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 718251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 728251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 738251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 748251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 758251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 768251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 778251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 788251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 798251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 808251754eSk-kashapov; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 818251754eSk-kashapov; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 8 828251754eSk-kashapov; CHECK-NEXT: [[_MSARG1:%.*]] = inttoptr i64 [[TMP8]] to ptr 838251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[_MSARG1]], align 8 848251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 858251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[TMP10]], 8 868251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O2:%.*]] = inttoptr i64 [[TMP11]] to ptr 878251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = load i32, ptr [[_MSARG_O2]], align 4 888251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 898251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 90debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB12:.*]], label %[[BB13:.*]], !prof [[PROF1]] 91debfd7b0SVitaly Buka; CHECK: [[BB12]]: 928251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 93debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB13]] 94debfd7b0SVitaly Buka; CHECK: [[BB13]]: 958251754eSk-kashapov; CHECK-NEXT: [[TMP15:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_2(ptr [[P]]) 968251754eSk-kashapov; CHECK-NEXT: [[TMP16:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 0 978251754eSk-kashapov; CHECK-NEXT: [[TMP17:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 1 988251754eSk-kashapov; CHECK-NEXT: store i16 [[TMP9]], ptr [[TMP16]], align 2 998251754eSk-kashapov; CHECK-NEXT: [[_MSCMP3:%.*]] = icmp ne i16 [[TMP9]], 0 100debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP3]], label %[[BB17:.*]], label %[[BB19:.*]], !prof [[PROF1]] 101debfd7b0SVitaly Buka; CHECK: [[BB17]]: 1028251754eSk-kashapov; CHECK-NEXT: [[TMP19:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP12]]) 1038251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP19]], ptr [[TMP17]], align 4 104debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB19]] 105debfd7b0SVitaly Buka; CHECK: [[BB19]]: 1068251754eSk-kashapov; CHECK-NEXT: store i16 [[X]], ptr [[P]], align 2 1078251754eSk-kashapov; CHECK-NEXT: ret void 1088251754eSk-kashapov; 109f032622dSk-kashapoventry: 110f032622dSk-kashapov store i16 %x, ptr %p 111f032622dSk-kashapov ret void 112f032622dSk-kashapov} 113f032622dSk-kashapov 114f032622dSk-kashapov 115f032622dSk-kashapovdefine void @Store4(ptr %p, i32 %x) sanitize_memory { 1168251754eSk-kashapov; CHECK-LABEL: define void @Store4( 1178251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]], i32 [[X:%.*]]) #[[ATTR0]] { 1188251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 1198251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 1208251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 1218251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 1228251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 1238251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 1248251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 1258251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 1268251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 1278251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 1288251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 1298251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 1308251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 1318251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 1328251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 1338251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 1348251754eSk-kashapov; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 1358251754eSk-kashapov; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 8 1368251754eSk-kashapov; CHECK-NEXT: [[_MSARG1:%.*]] = inttoptr i64 [[TMP8]] to ptr 1378251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i32, ptr [[_MSARG1]], align 8 1388251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 1398251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[TMP10]], 8 1408251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O2:%.*]] = inttoptr i64 [[TMP11]] to ptr 1418251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = load i32, ptr [[_MSARG_O2]], align 4 1428251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 1438251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 144debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB12:.*]], label %[[BB13:.*]], !prof [[PROF1]] 145debfd7b0SVitaly Buka; CHECK: [[BB12]]: 1468251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 147debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB13]] 148debfd7b0SVitaly Buka; CHECK: [[BB13]]: 1498251754eSk-kashapov; CHECK-NEXT: [[TMP15:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_4(ptr [[P]]) 1508251754eSk-kashapov; CHECK-NEXT: [[TMP16:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 0 1518251754eSk-kashapov; CHECK-NEXT: [[TMP17:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 1 1528251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP9]], ptr [[TMP16]], align 4 1538251754eSk-kashapov; CHECK-NEXT: [[_MSCMP3:%.*]] = icmp ne i32 [[TMP9]], 0 154debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP3]], label %[[BB17:.*]], label %[[BB19:.*]], !prof [[PROF1]] 155debfd7b0SVitaly Buka; CHECK: [[BB17]]: 1568251754eSk-kashapov; CHECK-NEXT: [[TMP19:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP12]]) 1578251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP19]], ptr [[TMP17]], align 4 158debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB19]] 159debfd7b0SVitaly Buka; CHECK: [[BB19]]: 1608251754eSk-kashapov; CHECK-NEXT: store i32 [[X]], ptr [[P]], align 4 1618251754eSk-kashapov; CHECK-NEXT: ret void 1628251754eSk-kashapov; 163f032622dSk-kashapoventry: 164f032622dSk-kashapov store i32 %x, ptr %p 165f032622dSk-kashapov ret void 166f032622dSk-kashapov} 167f032622dSk-kashapov 168f032622dSk-kashapov 169f032622dSk-kashapovdefine void @Store8(ptr %p, i64 %x) sanitize_memory { 1708251754eSk-kashapov; CHECK-LABEL: define void @Store8( 1718251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) #[[ATTR0]] { 1728251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 1738251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 1748251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 1758251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 1768251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 1778251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 1788251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 1798251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 1808251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 1818251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 1828251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 1838251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 1848251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 1858251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 1868251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 1878251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 1888251754eSk-kashapov; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 1898251754eSk-kashapov; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 8 1908251754eSk-kashapov; CHECK-NEXT: [[_MSARG1:%.*]] = inttoptr i64 [[TMP8]] to ptr 1918251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i64, ptr [[_MSARG1]], align 8 1928251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 1938251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[TMP10]], 8 1948251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O2:%.*]] = inttoptr i64 [[TMP11]] to ptr 1958251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = load i32, ptr [[_MSARG_O2]], align 4 1968251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 1978251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 198debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB12:.*]], label %[[BB13:.*]], !prof [[PROF1]] 199debfd7b0SVitaly Buka; CHECK: [[BB12]]: 2008251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 201debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB13]] 202debfd7b0SVitaly Buka; CHECK: [[BB13]]: 2038251754eSk-kashapov; CHECK-NEXT: [[TMP15:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_8(ptr [[P]]) 2048251754eSk-kashapov; CHECK-NEXT: [[TMP16:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 0 2058251754eSk-kashapov; CHECK-NEXT: [[TMP17:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 1 2068251754eSk-kashapov; CHECK-NEXT: store i64 [[TMP9]], ptr [[TMP16]], align 8 2078251754eSk-kashapov; CHECK-NEXT: [[_MSCMP3:%.*]] = icmp ne i64 [[TMP9]], 0 208debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP3]], label %[[BB17:.*]], label %[[BB22:.*]], !prof [[PROF1]] 209debfd7b0SVitaly Buka; CHECK: [[BB17]]: 2108251754eSk-kashapov; CHECK-NEXT: [[TMP19:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP12]]) 2118251754eSk-kashapov; CHECK-NEXT: [[TMP20:%.*]] = zext i32 [[TMP19]] to i64 2128251754eSk-kashapov; CHECK-NEXT: [[TMP21:%.*]] = shl i64 [[TMP20]], 32 2138251754eSk-kashapov; CHECK-NEXT: [[TMP22:%.*]] = or i64 [[TMP20]], [[TMP21]] 2148251754eSk-kashapov; CHECK-NEXT: store i64 [[TMP22]], ptr [[TMP17]], align 8 215debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB22]] 216debfd7b0SVitaly Buka; CHECK: [[BB22]]: 2178251754eSk-kashapov; CHECK-NEXT: store i64 [[X]], ptr [[P]], align 8 2188251754eSk-kashapov; CHECK-NEXT: ret void 2198251754eSk-kashapov; 220f032622dSk-kashapoventry: 221f032622dSk-kashapov store i64 %x, ptr %p 222f032622dSk-kashapov ret void 223f032622dSk-kashapov} 224f032622dSk-kashapov 225f032622dSk-kashapov 226f032622dSk-kashapovdefine void @Store16(ptr %p, i128 %x) sanitize_memory { 2278251754eSk-kashapov; CHECK-LABEL: define void @Store16( 2288251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]], i128 [[X:%.*]]) #[[ATTR0]] { 2298251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 2308251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 2318251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 2328251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 2338251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 2348251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 2358251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 2368251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 2378251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 2388251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 2398251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 2408251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 2418251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 2428251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 2438251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 2448251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 2458251754eSk-kashapov; CHECK-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 2468251754eSk-kashapov; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 8 2478251754eSk-kashapov; CHECK-NEXT: [[_MSARG1:%.*]] = inttoptr i64 [[TMP8]] to ptr 2488251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i128, ptr [[_MSARG1]], align 8 2498251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 2508251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[TMP10]], 8 2518251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O2:%.*]] = inttoptr i64 [[TMP11]] to ptr 2528251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = load i32, ptr [[_MSARG_O2]], align 4 2538251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 2548251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 255debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB12:.*]], label %[[BB13:.*]], !prof [[PROF1]] 256debfd7b0SVitaly Buka; CHECK: [[BB12]]: 2578251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 258debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB13]] 259debfd7b0SVitaly Buka; CHECK: [[BB13]]: 2608251754eSk-kashapov; CHECK-NEXT: [[TMP15:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_n(ptr [[P]], i64 16) 2618251754eSk-kashapov; CHECK-NEXT: [[TMP16:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 0 2628251754eSk-kashapov; CHECK-NEXT: [[TMP17:%.*]] = extractvalue { ptr, ptr } [[TMP15]], 1 2638251754eSk-kashapov; CHECK-NEXT: store i128 [[TMP9]], ptr [[TMP16]], align 8 2648251754eSk-kashapov; CHECK-NEXT: [[_MSCMP3:%.*]] = icmp ne i128 [[TMP9]], 0 265debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP3]], label %[[BB17:.*]], label %[[BB23:.*]], !prof [[PROF1]] 266debfd7b0SVitaly Buka; CHECK: [[BB17]]: 2678251754eSk-kashapov; CHECK-NEXT: [[TMP19:%.*]] = call i32 @__msan_chain_origin(i32 [[TMP12]]) 2688251754eSk-kashapov; CHECK-NEXT: [[TMP20:%.*]] = zext i32 [[TMP19]] to i64 2698251754eSk-kashapov; CHECK-NEXT: [[TMP21:%.*]] = shl i64 [[TMP20]], 32 2708251754eSk-kashapov; CHECK-NEXT: [[TMP22:%.*]] = or i64 [[TMP20]], [[TMP21]] 2718251754eSk-kashapov; CHECK-NEXT: store i64 [[TMP22]], ptr [[TMP17]], align 8 2728251754eSk-kashapov; CHECK-NEXT: [[TMP23:%.*]] = getelementptr i64, ptr [[TMP17]], i32 1 2738251754eSk-kashapov; CHECK-NEXT: store i64 [[TMP22]], ptr [[TMP23]], align 8 274debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB23]] 275debfd7b0SVitaly Buka; CHECK: [[BB23]]: 2768251754eSk-kashapov; CHECK-NEXT: store i128 [[X]], ptr [[P]], align 8 2778251754eSk-kashapov; CHECK-NEXT: ret void 2788251754eSk-kashapov; 279f032622dSk-kashapoventry: 280f032622dSk-kashapov store i128 %x, ptr %p 281f032622dSk-kashapov ret void 282f032622dSk-kashapov} 283f032622dSk-kashapov 284f032622dSk-kashapov 285f032622dSk-kashapovdefine i8 @Load1(ptr %p) sanitize_memory { 2868251754eSk-kashapov; CHECK-LABEL: define i8 @Load1( 2878251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0]] { 2888251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 2898251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 2908251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 2918251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 2928251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 2938251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 2948251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 2958251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 2968251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 2978251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 2988251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 2998251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 3008251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 3018251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 3028251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 3038251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 3048251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 3058251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 306debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB6:.*]], label %[[BB7:.*]], !prof [[PROF1]] 307debfd7b0SVitaly Buka; CHECK: [[BB6]]: 3088251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 309debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB7]] 310debfd7b0SVitaly Buka; CHECK: [[BB7]]: 3118251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i8, ptr [[P]], align 1 3128251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_1(ptr [[P]]) 3138251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 0 3148251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 1 3158251754eSk-kashapov; CHECK-NEXT: [[_MSLD:%.*]] = load i8, ptr [[TMP11]], align 1 3168251754eSk-kashapov; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4 3178251754eSk-kashapov; CHECK-NEXT: store i8 [[_MSLD]], ptr [[RETVAL_SHADOW]], align 8 3188251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP13]], ptr [[RETVAL_ORIGIN]], align 4 3198251754eSk-kashapov; CHECK-NEXT: ret i8 [[TMP9]] 3208251754eSk-kashapov; 321f032622dSk-kashapoventry: 322f032622dSk-kashapov %0 = load i8, ptr %p 323f032622dSk-kashapov ret i8 %0 324f032622dSk-kashapov} 325f032622dSk-kashapov 326f032622dSk-kashapov 327f032622dSk-kashapovdefine i16 @Load2(ptr %p) sanitize_memory { 3288251754eSk-kashapov; CHECK-LABEL: define i16 @Load2( 3298251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0]] { 3308251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 3318251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 3328251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 3338251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 3348251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 3358251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 3368251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 3378251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 3388251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 3398251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 3408251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 3418251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 3428251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 3438251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 3448251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 3458251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 3468251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 3478251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 348debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB6:.*]], label %[[BB7:.*]], !prof [[PROF1]] 349debfd7b0SVitaly Buka; CHECK: [[BB6]]: 3508251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 351debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB7]] 352debfd7b0SVitaly Buka; CHECK: [[BB7]]: 3538251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i16, ptr [[P]], align 2 3548251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_2(ptr [[P]]) 3558251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 0 3568251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 1 3578251754eSk-kashapov; CHECK-NEXT: [[_MSLD:%.*]] = load i16, ptr [[TMP11]], align 2 3588251754eSk-kashapov; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4 3598251754eSk-kashapov; CHECK-NEXT: store i16 [[_MSLD]], ptr [[RETVAL_SHADOW]], align 8 3608251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP13]], ptr [[RETVAL_ORIGIN]], align 4 3618251754eSk-kashapov; CHECK-NEXT: ret i16 [[TMP9]] 3628251754eSk-kashapov; 363f032622dSk-kashapoventry: 364f032622dSk-kashapov %0 = load i16, ptr %p 365f032622dSk-kashapov ret i16 %0 366f032622dSk-kashapov} 367f032622dSk-kashapov 368f032622dSk-kashapov 369f032622dSk-kashapovdefine i32 @Load4(ptr %p) sanitize_memory { 3708251754eSk-kashapov; CHECK-LABEL: define i32 @Load4( 3718251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0]] { 3728251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 3738251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 3748251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 3758251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 3768251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 3778251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 3788251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 3798251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 3808251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 3818251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 3828251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 3838251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 3848251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 3858251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 3868251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 3878251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 3888251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 3898251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 390debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB6:.*]], label %[[BB7:.*]], !prof [[PROF1]] 391debfd7b0SVitaly Buka; CHECK: [[BB6]]: 3928251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 393debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB7]] 394debfd7b0SVitaly Buka; CHECK: [[BB7]]: 3958251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i32, ptr [[P]], align 4 3968251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_4(ptr [[P]]) 3978251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 0 3988251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 1 3998251754eSk-kashapov; CHECK-NEXT: [[_MSLD:%.*]] = load i32, ptr [[TMP11]], align 4 4008251754eSk-kashapov; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4 4018251754eSk-kashapov; CHECK-NEXT: store i32 [[_MSLD]], ptr [[RETVAL_SHADOW]], align 8 4028251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP13]], ptr [[RETVAL_ORIGIN]], align 4 4038251754eSk-kashapov; CHECK-NEXT: ret i32 [[TMP9]] 4048251754eSk-kashapov; 405f032622dSk-kashapoventry: 406f032622dSk-kashapov %0 = load i32, ptr %p 407f032622dSk-kashapov ret i32 %0 408f032622dSk-kashapov} 409f032622dSk-kashapov 410f032622dSk-kashapov 411f032622dSk-kashapovdefine i64 @Load8(ptr %p) sanitize_memory { 4128251754eSk-kashapov; CHECK-LABEL: define i64 @Load8( 4138251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0]] { 4148251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 4158251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 4168251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 4178251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 4188251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 4198251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 4208251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 4218251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 4228251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 4238251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 4248251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 4258251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 4268251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 4278251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 4288251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 4298251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 4308251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 4318251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 432debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB6:.*]], label %[[BB7:.*]], !prof [[PROF1]] 433debfd7b0SVitaly Buka; CHECK: [[BB6]]: 4348251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 435debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB7]] 436debfd7b0SVitaly Buka; CHECK: [[BB7]]: 4378251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i64, ptr [[P]], align 8 4388251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_8(ptr [[P]]) 4398251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 0 4408251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 1 4418251754eSk-kashapov; CHECK-NEXT: [[_MSLD:%.*]] = load i64, ptr [[TMP11]], align 8 4428251754eSk-kashapov; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 8 4438251754eSk-kashapov; CHECK-NEXT: store i64 [[_MSLD]], ptr [[RETVAL_SHADOW]], align 8 4448251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP13]], ptr [[RETVAL_ORIGIN]], align 4 4458251754eSk-kashapov; CHECK-NEXT: ret i64 [[TMP9]] 4468251754eSk-kashapov; 447f032622dSk-kashapoventry: 448f032622dSk-kashapov %0 = load i64, ptr %p 449f032622dSk-kashapov ret i64 %0 450f032622dSk-kashapov} 451f032622dSk-kashapov 452f032622dSk-kashapov 453f032622dSk-kashapovdefine i128 @Load16(ptr %p) sanitize_memory { 4548251754eSk-kashapov; CHECK-LABEL: define i128 @Load16( 4558251754eSk-kashapov; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0]] { 4568251754eSk-kashapov; CHECK-NEXT: [[ENTRY:.*:]] 4578251754eSk-kashapov; CHECK-NEXT: [[TMP0:%.*]] = call ptr @__msan_get_context_state() 4588251754eSk-kashapov; CHECK-NEXT: [[PARAM_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 0 4598251754eSk-kashapov; CHECK-NEXT: [[RETVAL_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 1 4608251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_SHADOW:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 2 4618251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 3 4628251754eSk-kashapov; CHECK-NEXT: [[VA_ARG_OVERFLOW_SIZE:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 4 4638251754eSk-kashapov; CHECK-NEXT: [[PARAM_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 5 4648251754eSk-kashapov; CHECK-NEXT: [[RETVAL_ORIGIN:%.*]] = getelementptr { [100 x i64], [100 x i64], [100 x i64], [100 x i64], i64, [200 x i32], i32, i32 }, ptr [[TMP0]], i32 0, i32 6 4658251754eSk-kashapov; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[PARAM_SHADOW]] to i64 4668251754eSk-kashapov; CHECK-NEXT: [[_MSARG:%.*]] = inttoptr i64 [[TMP1]] to ptr 4678251754eSk-kashapov; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr [[_MSARG]], align 8 4688251754eSk-kashapov; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr [[PARAM_ORIGIN]] to i64 4698251754eSk-kashapov; CHECK-NEXT: [[_MSARG_O:%.*]] = inttoptr i64 [[TMP3]] to ptr 4708251754eSk-kashapov; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[_MSARG_O]], align 4 4718251754eSk-kashapov; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr [[VA_ARG_OVERFLOW_SIZE]], align 8 4728251754eSk-kashapov; CHECK-NEXT: call void @llvm.donothing() 4738251754eSk-kashapov; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0 474debfd7b0SVitaly Buka; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB6:.*]], label %[[BB7:.*]], !prof [[PROF1]] 475debfd7b0SVitaly Buka; CHECK: [[BB6]]: 4768251754eSk-kashapov; CHECK-NEXT: call void @__msan_warning(i32 [[TMP4]]) #[[ATTR2]] 477debfd7b0SVitaly Buka; CHECK-NEXT: br label %[[BB7]] 478debfd7b0SVitaly Buka; CHECK: [[BB7]]: 4798251754eSk-kashapov; CHECK-NEXT: [[TMP9:%.*]] = load i128, ptr [[P]], align 8 4808251754eSk-kashapov; CHECK-NEXT: [[TMP10:%.*]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_n(ptr [[P]], i64 16) 4818251754eSk-kashapov; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 0 4828251754eSk-kashapov; CHECK-NEXT: [[TMP12:%.*]] = extractvalue { ptr, ptr } [[TMP10]], 1 4838251754eSk-kashapov; CHECK-NEXT: [[_MSLD:%.*]] = load i128, ptr [[TMP11]], align 8 4848251754eSk-kashapov; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 8 4858251754eSk-kashapov; CHECK-NEXT: store i128 [[_MSLD]], ptr [[RETVAL_SHADOW]], align 8 4868251754eSk-kashapov; CHECK-NEXT: store i32 [[TMP13]], ptr [[RETVAL_ORIGIN]], align 4 4878251754eSk-kashapov; CHECK-NEXT: ret i128 [[TMP9]] 4888251754eSk-kashapov; 489f032622dSk-kashapoventry: 490f032622dSk-kashapov %0 = load i128, ptr %p 491f032622dSk-kashapov ret i128 %0 492f032622dSk-kashapov} 493f032622dSk-kashapov 4948251754eSk-kashapov;. 4958251754eSk-kashapov; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575} 4968251754eSk-kashapov;. 497