; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck %s
@Addr = global i64 0, align 8
@A = global ptr null, align 8
@Idx = global i64 0, align 8
define i64 @fun_BD12_Q() {
; CHECK-LABEL: fun_BD12_Q:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD12_R() {
; CHECK-LABEL: fun_BD12_R:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD12_S() {
; CHECK-LABEL: fun_BD12_S:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD12_T() {
; CHECK-LABEL: fun_BD12_T:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD12_p() {
; CHECK-LABEL: fun_BD12_p:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,p"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BDX12_Q() {
; CHECK-LABEL: fun_BDX12_Q:
; CHECK: #APP
; CHECK: lay %r2, 800(%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX12_R() {
; CHECK-LABEL: fun_BDX12_R:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1,%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX12_S() {
; CHECK-LABEL: fun_BDX12_S:
; CHECK: #APP
; CHECK: lay %r2, 800(%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX12_T() {
; CHECK-LABEL: fun_BDX12_T:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1,%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX12_p() {
; CHECK-LABEL: fun_BDX12_p:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1,%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,p"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BD20_Q() {
; CHECK-LABEL: fun_BD20_Q:
; CHECK: #APP
; CHECK: lay %r2, 0(%r2)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD20_R() {
; CHECK-LABEL: fun_BD20_R:
; CHECK: #APP
; CHECK: lay %r2, 0(%r2)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD20_S() {
; CHECK-LABEL: fun_BD20_S:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD20_T() {
; CHECK-LABEL: fun_BD20_T:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BD20_p() {
; CHECK-LABEL: fun_BD20_p:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1)
entry:
%0 = load ptr, ptr @A
%arrayidx = getelementptr inbounds i64, ptr %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,p"(ptr nonnull %arrayidx)
store i64 %1, ptr @Addr
ret i64 %1
}
define i64 @fun_BDX20_Q() {
; CHECK-LABEL: fun_BDX20_Q:
; CHECK: #APP
; CHECK: lay %r2, 0(%r1)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX20_R() {
; CHECK-LABEL: fun_BDX20_R:
; CHECK: #APP
; CHECK: lay %r2, 0(%r1)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX20_S() {
; CHECK-LABEL: fun_BDX20_S:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX20_T() {
; CHECK-LABEL: fun_BDX20_T:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1,%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}
define i64 @fun_BDX20_p() {
; CHECK-LABEL: fun_BDX20_p:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1,%r2)
entry:
%0 = load ptr, ptr @A
%1 = load i64, ptr @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, ptr %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,p"(ptr %arrayidx)
store i64 %2, ptr @Addr
ret i64 %2
}