The LIT test cases were migrated with the script provided by Nikita Popov. No manual changes were made. Committed without review since no functional changes, after consultation with uweigand.
86 lines
2.2 KiB
LLVM
86 lines
2.2 KiB
LLVM
; Test the "R" asm constraint, which accepts addresses that have a base,
|
|
; an index and a 12-bit displacement.
|
|
;
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s
|
|
|
|
; Check the lowest range.
|
|
define void @f1(i64 %base) {
|
|
; CHECK-LABEL: f1:
|
|
; CHECK: blah 0(%r2)
|
|
; CHECK: br %r14
|
|
%addr = inttoptr i64 %base to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|
|
|
|
; Check the next lowest byte.
|
|
define void @f2(i64 %base) {
|
|
; CHECK-LABEL: f2:
|
|
; CHECK: aghi %r2, -1
|
|
; CHECK: blah 0(%r2)
|
|
; CHECK: br %r14
|
|
%add = add i64 %base, -1
|
|
%addr = inttoptr i64 %add to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|
|
|
|
; Check the highest range.
|
|
define void @f3(i64 %base) {
|
|
; CHECK-LABEL: f3:
|
|
; CHECK: blah 4095(%r2)
|
|
; CHECK: br %r14
|
|
%add = add i64 %base, 4095
|
|
%addr = inttoptr i64 %add to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|
|
|
|
; Check the next highest byte.
|
|
define void @f4(i64 %base) {
|
|
; CHECK-LABEL: f4:
|
|
; CHECK: aghi %r2, 4096
|
|
; CHECK: blah 0(%r2)
|
|
; CHECK: br %r14
|
|
%add = add i64 %base, 4096
|
|
%addr = inttoptr i64 %add to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|
|
|
|
; Check that indices are allowed
|
|
define void @f5(i64 %base, i64 %index) {
|
|
; CHECK-LABEL: f5:
|
|
; CHECK: blah 0(%r3,%r2)
|
|
; CHECK: br %r14
|
|
%add = add i64 %base, %index
|
|
%addr = inttoptr i64 %add to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|
|
|
|
; Check that indices and displacements are allowed simultaneously
|
|
define void @f6(i64 %base, i64 %index) {
|
|
; CHECK-LABEL: f6:
|
|
; CHECK: blah 4095(%r3,%r2)
|
|
; CHECK: br %r14
|
|
%add = add i64 %base, 4095
|
|
%addi = add i64 %add, %index
|
|
%addr = inttoptr i64 %addi to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|
|
|
|
; Check that LAY is used if there is an index but the displacement is too large
|
|
define void @f7(i64 %base, i64 %index) {
|
|
; CHECK-LABEL: f7:
|
|
; CHECK: lay %r1, 4096(%r3,%r2)
|
|
; CHECK: blah 0(%r1)
|
|
; CHECK: br %r14
|
|
%add = add i64 %base, 4096
|
|
%addi = add i64 %add, %index
|
|
%addr = inttoptr i64 %addi to ptr
|
|
call void asm "blah $0", "=*R" (ptr elementtype(i64) %addr)
|
|
ret void
|
|
}
|