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

88 lines
2.2 KiB
LLVM

; Test data prefetching.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
declare void @llvm.prefetch(ptr, i32, i32, i32)
@g = dso_local global [4096 x i8] zeroinitializer
; Check that instruction read prefetches are ignored.
define dso_local void @f1(ptr %ptr) {
; CHECK-LABEL: f1:
; CHECK-NOT: %r2
; CHECK: br %r14
call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 0)
ret void
}
; Check that instruction write prefetches are ignored.
define dso_local void @f2(ptr %ptr) {
; CHECK-LABEL: f2:
; CHECK-NOT: %r2
; CHECK: br %r14
call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 0)
ret void
}
; Check data read prefetches.
define dso_local void @f3(ptr %ptr) {
; CHECK-LABEL: f3:
; CHECK: pfd 1, 0(%r2)
; CHECK: br %r14
call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1)
ret void
}
; Check data write prefetches.
define dso_local void @f4(ptr %ptr) {
; CHECK-LABEL: f4:
; CHECK: pfd 2, 0(%r2)
; CHECK: br %r14
call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)
ret void
}
; Check an address at the negative end of the range.
define dso_local void @f5(ptr %base, i64 %index) {
; CHECK-LABEL: f5:
; CHECK: pfd 2, -524288({{%r2,%r3|%r3,%r2}})
; CHECK: br %r14
%add = add i64 %index, -524288
%ptr = getelementptr i8, ptr %base, i64 %add
call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)
ret void
}
; Check an address at the positive end of the range.
define dso_local void @f6(ptr %base, i64 %index) {
; CHECK-LABEL: f6:
; CHECK: pfd 2, 524287({{%r2,%r3|%r3,%r2}})
; CHECK: br %r14
%add = add i64 %index, 524287
%ptr = getelementptr i8, ptr %base, i64 %add
call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)
ret void
}
; Check that the next address up still compiles.
define dso_local void @f7(ptr %base, i64 %index) {
; CHECK-LABEL: f7:
; CHECK: 524288
; CHECK: pfd 2,
; CHECK: br %r14
%add = add i64 %index, 524288
%ptr = getelementptr i8, ptr %base, i64 %add
call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)
ret void
}
; Check pc-relative prefetches.
define dso_local void @f8() {
; CHECK-LABEL: f8:
; CHECK: pfdrl 2, g
; CHECK: br %r14
%ptr = getelementptr [4096 x i8], ptr@g, i64 0, i64 0
call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)
ret void
}