
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.
88 lines
2.2 KiB
LLVM
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
|
|
}
|