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