| ; 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 | |
| } |