xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/PowerPC32/kernel-ppcle.ll (revision d9e2fb70d0b72b398fef3106bab0605b5b3e6761)
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