88 lines · plain
1; Test data prefetching.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare void @llvm.prefetch(ptr, i32, i32, i32)6 7@g = dso_local global [4096 x i8] zeroinitializer8 9; Check that instruction read prefetches are ignored.10define dso_local void @f1(ptr %ptr) {11; CHECK-LABEL: f1:12; CHECK-NOT: %r213; CHECK: br %r1414 call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 0)15 ret void16}17 18; Check that instruction write prefetches are ignored.19define dso_local void @f2(ptr %ptr) {20; CHECK-LABEL: f2:21; CHECK-NOT: %r222; CHECK: br %r1423 call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 0)24 ret void25}26 27; Check data read prefetches.28define dso_local void @f3(ptr %ptr) {29; CHECK-LABEL: f3:30; CHECK: pfd 1, 0(%r2)31; CHECK: br %r1432 call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1)33 ret void34}35 36; Check data write prefetches.37define dso_local void @f4(ptr %ptr) {38; CHECK-LABEL: f4:39; CHECK: pfd 2, 0(%r2)40; CHECK: br %r1441 call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)42 ret void43}44 45; Check an address at the negative end of the range.46define dso_local void @f5(ptr %base, i64 %index) {47; CHECK-LABEL: f5:48; CHECK: pfd 2, -524288({{%r2,%r3|%r3,%r2}})49; CHECK: br %r1450 %add = add i64 %index, -52428851 %ptr = getelementptr i8, ptr %base, i64 %add52 call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)53 ret void54}55 56; Check an address at the positive end of the range.57define dso_local void @f6(ptr %base, i64 %index) {58; CHECK-LABEL: f6:59; CHECK: pfd 2, 524287({{%r2,%r3|%r3,%r2}})60; CHECK: br %r1461 %add = add i64 %index, 52428762 %ptr = getelementptr i8, ptr %base, i64 %add63 call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)64 ret void65}66 67; Check that the next address up still compiles.68define dso_local void @f7(ptr %base, i64 %index) {69; CHECK-LABEL: f7:70; CHECK: 52428871; CHECK: pfd 2,72; CHECK: br %r1473 %add = add i64 %index, 52428874 %ptr = getelementptr i8, ptr %base, i64 %add75 call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)76 ret void77}78 79; Check pc-relative prefetches.80define dso_local void @f8() {81; CHECK-LABEL: f8:82; CHECK: pfdrl 2, g83; CHECK: br %r1484 %ptr = getelementptr [4096 x i8], ptr@g, i64 0, i64 085 call void @llvm.prefetch(ptr %ptr, i32 1, i32 0, i32 1)86 ret void87}88