blob: 865363ba592e155de0af639a709824a1461bb73a [file] [log] [blame]
; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck %s
@Addr = global i64 0, align 8
@A = global i64* 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 i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD12_R() {
; CHECK-LABEL: fun_BD12_R:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD12_S() {
; CHECK-LABEL: fun_BD12_S:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD12_T() {
; CHECK-LABEL: fun_BD12_T:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD12_p() {
; CHECK-LABEL: fun_BD12_p:
; CHECK: #APP
; CHECK: lay %r2, 800(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 100
%1 = tail call i64 asm "lay $0, $1", "=r,p"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BDX12_Q() {
; CHECK-LABEL: fun_BDX12_Q:
; CHECK: #APP
; CHECK: lay %r2, 800(%r2)
entry:
%0 = load i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(i64* %arrayidx)
store i64 %2, i64* @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 i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(i64* %arrayidx)
store i64 %2, i64* @Addr
ret i64 %2
}
define i64 @fun_BDX12_S() {
; CHECK-LABEL: fun_BDX12_S:
; CHECK: #APP
; CHECK: lay %r2, 800(%r2)
entry:
%0 = load i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(i64* %arrayidx)
store i64 %2, i64* @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 i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(i64* %arrayidx)
store i64 %2, i64* @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 i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 100
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,p"(i64* %arrayidx)
store i64 %2, i64* @Addr
ret i64 %2
}
define i64 @fun_BD20_Q() {
; CHECK-LABEL: fun_BD20_Q:
; CHECK: #APP
; CHECK: lay %r2, 0(%r2)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD20_R() {
; CHECK-LABEL: fun_BD20_R:
; CHECK: #APP
; CHECK: lay %r2, 0(%r2)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD20_S() {
; CHECK-LABEL: fun_BD20_S:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD20_T() {
; CHECK-LABEL: fun_BD20_T:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BD20_p() {
; CHECK-LABEL: fun_BD20_p:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r1)
entry:
%0 = load i64*, i64** @A
%arrayidx = getelementptr inbounds i64, i64* %0, i64 1000
%1 = tail call i64 asm "lay $0, $1", "=r,p"(i64* nonnull %arrayidx)
store i64 %1, i64* @Addr
ret i64 %1
}
define i64 @fun_BDX20_Q() {
; CHECK-LABEL: fun_BDX20_Q:
; CHECK: #APP
; CHECK: lay %r2, 0(%r1)
entry:
%0 = load i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(i64* %arrayidx)
store i64 %2, i64* @Addr
ret i64 %2
}
define i64 @fun_BDX20_R() {
; CHECK-LABEL: fun_BDX20_R:
; CHECK: #APP
; CHECK: lay %r2, 0(%r1)
entry:
%0 = load i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(i64* %arrayidx)
store i64 %2, i64* @Addr
ret i64 %2
}
define i64 @fun_BDX20_S() {
; CHECK-LABEL: fun_BDX20_S:
; CHECK: #APP
; CHECK: lay %r2, 8000(%r2)
entry:
%0 = load i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(i64* %arrayidx)
store i64 %2, i64* @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 i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(i64* %arrayidx)
store i64 %2, i64* @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 i64*, i64** @A
%1 = load i64, i64* @Idx
%add = add nsw i64 %1, 1000
%arrayidx = getelementptr inbounds i64, i64* %0, i64 %add
%2 = tail call i64 asm "lay $0, $1", "=r,p"(i64* %arrayidx)
store i64 %2, i64* @Addr
ret i64 %2
}