xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/PowerPC/kernel-ppc64le.ll (revision 1b66306c9c1adce20e2f3cfb1df0af2fb6a10318)
1; RUN: opt < %s -S -msan-kernel=1 -passes=msan 2>&1 | FileCheck %s
2
3target datalayout = "e-m:e-i64:64-n32:64"
4target triple = "powerpc64le--linux"
5
6define void @Store1(ptr %p, i8 %x) sanitize_memory {
7entry:
8  store i8 %x, ptr %p
9  ret void
10}
11
12; CHECK-LABEL: define {{[^@]+}}@Store1(
13; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_1(ptr %p)
14; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
15; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
16; CHECK: store i8 {{.+}}, ptr [[SHADOW]]
17; CHECK: ret void
18
19define void @Store2(ptr %p, i16 %x) sanitize_memory {
20entry:
21  store i16 %x, ptr %p
22  ret void
23}
24
25; CHECK-LABEL: define {{[^@]+}}@Store2(
26; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_2(ptr %p)
27; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
28; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
29; CHECK: store i16 {{.+}}, ptr [[SHADOW]]
30; CHECK: ret void
31
32define void @Store4(ptr %p, i32 %x) sanitize_memory {
33entry:
34  store i32 %x, ptr %p
35  ret void
36}
37
38; CHECK-LABEL: define {{[^@]+}}@Store4(
39; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_4(ptr %p)
40; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
41; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
42; CHECK: store i32 {{.+}}, ptr [[SHADOW]]
43; CHECK: ret void
44
45define void @Store8(ptr %p, i64 %x) sanitize_memory {
46entry:
47  store i64 %x, ptr %p
48  ret void
49}
50
51; CHECK-LABEL: define {{[^@]+}}@Store8(
52; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_8(ptr %p)
53; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
54; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
55; CHECK: store i64 {{.+}}, ptr [[SHADOW]]
56; CHECK: ret void
57
58define void @Store16(ptr %p, i128 %x) sanitize_memory {
59entry:
60  store i128 %x, ptr %p
61  ret void
62}
63
64; CHECK-LABEL: define {{[^@]+}}@Store16(
65; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_store_n(ptr %p, i64 16)
66; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
67; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
68; CHECK: store i128 {{.+}}, ptr [[SHADOW]]
69; CHECK: ret void
70
71define i8 @Load1(ptr %p) sanitize_memory {
72entry:
73  %0 = load i8, ptr %p
74  ret i8 %0
75}
76
77; CHECK-LABEL: define {{[^@]+}}@Load1(
78; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_1(ptr %p)
79; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
80; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
81; CHECK: [[SHADOW_VAL:%[a-z0-9_]+]] = load i8, ptr [[SHADOW]]
82; CHECK: [[ORIGIN_VAL:%[a-z0-9_]+]] = load i32, ptr [[ORIGIN]]
83; CHECK: store i8 [[SHADOW_VAL]], ptr %retval_shadow
84; CHECK: store i32 [[ORIGIN_VAL]], ptr %retval_origin
85; CHECK: ret i8 {{.+}}
86
87define i16 @Load2(ptr %p) sanitize_memory {
88entry:
89  %0 = load i16, ptr %p
90  ret i16 %0
91}
92
93; CHECK-LABEL: define {{[^@]+}}@Load2(
94; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_2(ptr %p)
95; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
96; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
97; CHECK: [[SHADOW_VAL:%[a-z0-9_]+]] = load i16, ptr [[SHADOW]]
98; CHECK: [[ORIGIN_VAL:%[a-z0-9_]+]] = load i32, ptr [[ORIGIN]]
99; CHECK: store i16 [[SHADOW_VAL]], ptr %retval_shadow
100; CHECK: store i32 [[ORIGIN_VAL]], ptr %retval_origin
101; CHECK: ret i16 {{.+}}
102
103define i32 @Load4(ptr %p) sanitize_memory {
104entry:
105  %0 = load i32, ptr %p
106  ret i32 %0
107}
108
109; CHECK-LABEL: define {{[^@]+}}@Load4(
110; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_4(ptr %p)
111; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
112; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
113; CHECK: [[SHADOW_VAL:%[a-z0-9_]+]] = load i32, ptr [[SHADOW]]
114; CHECK: [[ORIGIN_VAL:%[a-z0-9_]+]] = load i32, ptr [[ORIGIN]]
115; CHECK: store i32 [[SHADOW_VAL]], ptr %retval_shadow
116; CHECK: store i32 [[ORIGIN_VAL]], ptr %retval_origin
117; CHECK: ret i32 {{.+}}
118
119define i64 @Load8(ptr %p) sanitize_memory {
120entry:
121  %0 = load i64, ptr %p
122  ret i64 %0
123}
124
125; CHECK-LABEL: define {{[^@]+}}@Load8(
126; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_8(ptr %p)
127; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
128; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
129; CHECK: [[SHADOW_VAL:%[a-z0-9_]+]] = load i64, ptr [[SHADOW]]
130; CHECK: [[ORIGIN_VAL:%[a-z0-9_]+]] = load i32, ptr [[ORIGIN]]
131; CHECK: store i64 [[SHADOW_VAL]], ptr %retval_shadow
132; CHECK: store i32 [[ORIGIN_VAL]], ptr %retval_origin
133; CHECK: ret i64 {{.+}}
134
135define i128 @Load16(ptr %p) sanitize_memory {
136entry:
137  %0 = load i128, ptr %p
138  ret i128 %0
139}
140
141; CHECK-LABEL: define {{[^@]+}}@Load16(
142; CHECK: [[META:%[a-z0-9_]+]] = call { ptr, ptr } @__msan_metadata_ptr_for_load_n(ptr %p, i64 16)
143; CHECK: [[SHADOW:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 0
144; CHECK: [[ORIGIN:%[a-z0-9_]+]] = extractvalue { ptr, ptr } [[META]], 1
145; CHECK: [[SHADOW_VAL:%[a-z0-9_]+]] = load i128, ptr [[SHADOW]]
146; CHECK: [[ORIGIN_VAL:%[a-z0-9_]+]] = load i32, ptr [[ORIGIN]]
147; CHECK: store i128 [[SHADOW_VAL]], ptr %retval_shadow
148; CHECK: store i32 [[ORIGIN_VAL]], ptr %retval_origin
149; CHECK: ret i128 {{.+}}
150