xref: /llvm-project/llvm/test/CodeGen/SystemZ/inline-asm-addr.ll (revision a1710eb3cd5823c5d14899112ca3086acbdbe9cb)
1; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck %s
2
3@Addr = global i64 0, align 8
4@A = global ptr null, align 8
5@Idx = global i64 0, align 8
6
7define i64 @fun_BD12_Q() {
8; CHECK-LABEL: fun_BD12_Q:
9; CHECK: #APP
10; CHECK: lay	%r2, 800(%r1)
11entry:
12  %0 = load ptr, ptr @A
13  %arrayidx = getelementptr inbounds i64, ptr %0, i64 100
14  %1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr nonnull %arrayidx)
15  store i64 %1, ptr @Addr
16  ret i64 %1
17}
18
19define i64 @fun_BD12_R() {
20; CHECK-LABEL: fun_BD12_R:
21; CHECK: #APP
22; CHECK: lay	%r2, 800(%r1)
23entry:
24  %0 = load ptr, ptr @A
25  %arrayidx = getelementptr inbounds i64, ptr %0, i64 100
26  %1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr nonnull %arrayidx)
27  store i64 %1, ptr @Addr
28  ret i64 %1
29}
30
31define i64 @fun_BD12_S() {
32; CHECK-LABEL: fun_BD12_S:
33; CHECK: #APP
34; CHECK: lay	%r2, 800(%r1)
35entry:
36  %0 = load ptr, ptr @A
37  %arrayidx = getelementptr inbounds i64, ptr %0, i64 100
38  %1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr nonnull %arrayidx)
39  store i64 %1, ptr @Addr
40  ret i64 %1
41}
42
43define i64 @fun_BD12_T() {
44; CHECK-LABEL: fun_BD12_T:
45; CHECK: #APP
46; CHECK: lay	%r2, 800(%r1)
47entry:
48  %0 = load ptr, ptr @A
49  %arrayidx = getelementptr inbounds i64, ptr %0, i64 100
50  %1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr nonnull %arrayidx)
51  store i64 %1, ptr @Addr
52  ret i64 %1
53}
54
55define i64 @fun_BD12_p() {
56; CHECK-LABEL: fun_BD12_p:
57; CHECK: #APP
58; CHECK: lay	%r2, 800(%r1)
59entry:
60  %0 = load ptr, ptr @A
61  %arrayidx = getelementptr inbounds i64, ptr %0, i64 100
62  %1 = tail call i64 asm "lay $0, $1", "=r,p"(ptr nonnull %arrayidx)
63  store i64 %1, ptr @Addr
64  ret i64 %1
65}
66
67define i64 @fun_BDX12_Q() {
68; CHECK-LABEL: fun_BDX12_Q:
69; CHECK: #APP
70; CHECK: lay	%r2, 800(%r2)
71entry:
72  %0 = load ptr, ptr @A
73  %1 = load i64, ptr @Idx
74  %add = add nsw i64 %1, 100
75  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
76  %2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr %arrayidx)
77  store i64 %2, ptr @Addr
78  ret i64 %2
79}
80
81define i64 @fun_BDX12_R() {
82; CHECK-LABEL: fun_BDX12_R:
83; CHECK: #APP
84; CHECK: lay	%r2, 800(%r1,%r2)
85entry:
86  %0 = load ptr, ptr @A
87  %1 = load i64, ptr @Idx
88  %add = add nsw i64 %1, 100
89  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
90  %2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr %arrayidx)
91  store i64 %2, ptr @Addr
92  ret i64 %2
93}
94
95define i64 @fun_BDX12_S() {
96; CHECK-LABEL: fun_BDX12_S:
97; CHECK: #APP
98; CHECK: lay	%r2, 800(%r2)
99entry:
100  %0 = load ptr, ptr @A
101  %1 = load i64, ptr @Idx
102  %add = add nsw i64 %1, 100
103  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
104  %2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr %arrayidx)
105  store i64 %2, ptr @Addr
106  ret i64 %2
107}
108
109define i64 @fun_BDX12_T() {
110; CHECK-LABEL: fun_BDX12_T:
111; CHECK: #APP
112; CHECK: lay	%r2, 800(%r1,%r2)
113entry:
114  %0 = load ptr, ptr @A
115  %1 = load i64, ptr @Idx
116  %add = add nsw i64 %1, 100
117  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
118  %2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr %arrayidx)
119  store i64 %2, ptr @Addr
120  ret i64 %2
121}
122
123define i64 @fun_BDX12_p() {
124; CHECK-LABEL: fun_BDX12_p:
125; CHECK: #APP
126; CHECK: lay	%r2, 800(%r1,%r2)
127entry:
128  %0 = load ptr, ptr @A
129  %1 = load i64, ptr @Idx
130  %add = add nsw i64 %1, 100
131  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
132  %2 = tail call i64 asm "lay $0, $1", "=r,p"(ptr %arrayidx)
133  store i64 %2, ptr @Addr
134  ret i64 %2
135}
136
137define i64 @fun_BD20_Q() {
138; CHECK-LABEL: fun_BD20_Q:
139; CHECK: #APP
140; CHECK: lay	%r2, 0(%r2)
141entry:
142  %0 = load ptr, ptr @A
143  %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
144  %1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr nonnull %arrayidx)
145  store i64 %1, ptr @Addr
146  ret i64 %1
147}
148
149define i64 @fun_BD20_R() {
150; CHECK-LABEL: fun_BD20_R:
151; CHECK: #APP
152; CHECK: lay	%r2, 0(%r2)
153entry:
154  %0 = load ptr, ptr @A
155  %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
156  %1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr nonnull %arrayidx)
157  store i64 %1, ptr @Addr
158  ret i64 %1
159}
160
161define i64 @fun_BD20_S() {
162; CHECK-LABEL: fun_BD20_S:
163; CHECK: #APP
164; CHECK: lay	%r2, 8000(%r1)
165entry:
166  %0 = load ptr, ptr @A
167  %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
168  %1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr nonnull %arrayidx)
169  store i64 %1, ptr @Addr
170  ret i64 %1
171}
172
173define i64 @fun_BD20_T() {
174; CHECK-LABEL: fun_BD20_T:
175; CHECK: #APP
176; CHECK: lay	%r2, 8000(%r1)
177entry:
178  %0 = load ptr, ptr @A
179  %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
180  %1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr nonnull %arrayidx)
181  store i64 %1, ptr @Addr
182  ret i64 %1
183}
184
185define i64 @fun_BD20_p() {
186; CHECK-LABEL: fun_BD20_p:
187; CHECK: #APP
188; CHECK: lay	%r2, 8000(%r1)
189entry:
190  %0 = load ptr, ptr @A
191  %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
192  %1 = tail call i64 asm "lay $0, $1", "=r,p"(ptr nonnull %arrayidx)
193  store i64 %1, ptr @Addr
194  ret i64 %1
195}
196
197define i64 @fun_BDX20_Q() {
198; CHECK-LABEL: fun_BDX20_Q:
199; CHECK: #APP
200; CHECK: lay	%r2, 0(%r1)
201entry:
202  %0 = load ptr, ptr @A
203  %1 = load i64, ptr @Idx
204  %add = add nsw i64 %1, 1000
205  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
206  %2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr %arrayidx)
207  store i64 %2, ptr @Addr
208  ret i64 %2
209}
210
211define i64 @fun_BDX20_R() {
212; CHECK-LABEL: fun_BDX20_R:
213; CHECK: #APP
214; CHECK: lay	%r2, 0(%r1)
215entry:
216  %0 = load ptr, ptr @A
217  %1 = load i64, ptr @Idx
218  %add = add nsw i64 %1, 1000
219  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
220  %2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr %arrayidx)
221  store i64 %2, ptr @Addr
222  ret i64 %2
223}
224
225define i64 @fun_BDX20_S() {
226; CHECK-LABEL: fun_BDX20_S:
227; CHECK: #APP
228; CHECK: lay	%r2, 8000(%r2)
229entry:
230  %0 = load ptr, ptr @A
231  %1 = load i64, ptr @Idx
232  %add = add nsw i64 %1, 1000
233  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
234  %2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr %arrayidx)
235  store i64 %2, ptr @Addr
236  ret i64 %2
237}
238
239define i64 @fun_BDX20_T() {
240; CHECK-LABEL: fun_BDX20_T:
241; CHECK: #APP
242; CHECK: lay	%r2, 8000(%r1,%r2)
243entry:
244  %0 = load ptr, ptr @A
245  %1 = load i64, ptr @Idx
246  %add = add nsw i64 %1, 1000
247  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
248  %2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr %arrayidx)
249  store i64 %2, ptr @Addr
250  ret i64 %2
251}
252
253define i64 @fun_BDX20_p() {
254; CHECK-LABEL: fun_BDX20_p:
255; CHECK: #APP
256; CHECK: lay	%r2, 8000(%r1,%r2)
257entry:
258  %0 = load ptr, ptr @A
259  %1 = load i64, ptr @Idx
260  %add = add nsw i64 %1, 1000
261  %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
262  %2 = tail call i64 asm "lay $0, $1", "=r,p"(ptr %arrayidx)
263  store i64 %2, ptr @Addr
264  ret i64 %2
265}
266