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