Files
clang-p2996/llvm/test/CodeGen/SystemZ/bswap-06.ll
Kai Nacke a1710eb3cd [SystemZ][NFC] Opaque pointer migration.
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.
2022-10-11 21:09:43 +00:00

89 lines
2.2 KiB
LLVM

; Test 16-bit byteswaps from memory to registers.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
declare i16 @llvm.bswap.i16(i16 %a)
; Check LRVH with no displacement.
define i16 @f1(ptr %src) {
; CHECK-LABEL: f1:
; CHECK: lrvh %r2, 0(%r2)
; CHECK: br %r14
%a = load i16, ptr %src
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}
; Check the high end of the aligned LRVH range.
define i16 @f2(ptr %src) {
; CHECK-LABEL: f2:
; CHECK: lrvh %r2, 524286(%r2)
; CHECK: br %r14
%ptr = getelementptr i16, ptr %src, i64 262143
%a = load i16, ptr %ptr
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}
; Check the next word up, which needs separate address logic.
; Other sequences besides this one would be OK.
define i16 @f3(ptr %src) {
; CHECK-LABEL: f3:
; CHECK: agfi %r2, 524288
; CHECK: lrvh %r2, 0(%r2)
; CHECK: br %r14
%ptr = getelementptr i16, ptr %src, i64 262144
%a = load i16, ptr %ptr
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}
; Check the high end of the negative aligned LRVH range.
define i16 @f4(ptr %src) {
; CHECK-LABEL: f4:
; CHECK: lrvh %r2, -2(%r2)
; CHECK: br %r14
%ptr = getelementptr i16, ptr %src, i64 -1
%a = load i16, ptr %ptr
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}
; Check the low end of the LRVH range.
define i16 @f5(ptr %src) {
; CHECK-LABEL: f5:
; CHECK: lrvh %r2, -524288(%r2)
; CHECK: br %r14
%ptr = getelementptr i16, ptr %src, i64 -262144
%a = load i16, ptr %ptr
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}
; Check the next word down, which needs separate address logic.
; Other sequences besides this one would be OK.
define i16 @f6(ptr %src) {
; CHECK-LABEL: f6:
; CHECK: agfi %r2, -524290
; CHECK: lrvh %r2, 0(%r2)
; CHECK: br %r14
%ptr = getelementptr i16, ptr %src, i64 -262145
%a = load i16, ptr %ptr
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}
; Check that LRVH allows an index.
define i16 @f7(i64 %src, i64 %index) {
; CHECK-LABEL: f7:
; CHECK: lrvh %r2, 524287({{%r3,%r2|%r2,%r3}})
; CHECK: br %r14
%add1 = add i64 %src, %index
%add2 = add i64 %add1, 524287
%ptr = inttoptr i64 %add2 to ptr
%a = load i16, ptr %ptr
%swapped = call i16 @llvm.bswap.i16(i16 %a)
ret i16 %swapped
}