1; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck %s
2
3@Addr = global i64 0, align 8
4@A = global i64* null, align 8
5@Idx = global i64 0, align 8
6
7define i64 @fun_BD12_p() {
8; CHECK-LABEL: fun_BD12_p:
9; CHECK: #APP
10; CHECK: lay	%r2, 800(%r1)
11entry:
12  %0 = load i64*, i64** @A
13  %arrayidx = getelementptr inbounds i64, i64* %0, i64 100
14  %1 = tail call i64 asm "lay $0, $1", "=r,p"(i64* nonnull %arrayidx)
15  store i64 %1, i64* @Addr
16  ret i64 %1
17}
18
19define i64 @fun_BDX12_p() {
20; CHECK-LABEL: fun_BDX12_p:
21; CHECK: #APP
22; CHECK: lay	%r2, 800(%r1,%r2)
23entry:
24  %0 = load i64*, i64** @A
25  %1 = load i64, i64* @Idx
26  %add = add nsw i64 %1, 100
27  %arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
28  %2 = tail call i64 asm "lay $0, $1", "=r,p"(i64* %arrayidx)
29  store i64 %2, i64* @Addr
30  ret i64 %2
31}
32
33define i64 @fun_BD20_p() {
34; CHECK-LABEL: fun_BD20_p:
35; CHECK: #APP
36; CHECK: lay	%r2, 8000(%r1)
37entry:
38  %0 = load i64*, i64** @A
39  %arrayidx = getelementptr inbounds i64, i64* %0, i64 1000
40  %1 = tail call i64 asm "lay $0, $1", "=r,p"(i64* nonnull %arrayidx)
41  store i64 %1, i64* @Addr
42  ret i64 %1
43}
44
45define i64 @fun_BDX20_p() {
46; CHECK-LABEL: fun_BDX20_p:
47; CHECK: #APP
48; CHECK: lay	%r2, 8000(%r1,%r2)
49entry:
50  %0 = load i64*, i64** @A
51  %1 = load i64, i64* @Idx
52  %add = add nsw i64 %1, 1000
53  %arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
54  %2 = tail call i64 asm "lay $0, $1", "=r,p"(i64* %arrayidx)
55  store i64 %2, i64* @Addr
56  ret i64 %2
57}
58