diff --git a/llvm/lib/Transforms/Scalar/LoopDataPrefetch.cpp b/llvm/lib/Transforms/Scalar/LoopDataPrefetch.cpp --- a/llvm/lib/Transforms/Scalar/LoopDataPrefetch.cpp +++ b/llvm/lib/Transforms/Scalar/LoopDataPrefetch.cpp @@ -213,10 +213,12 @@ bool LoopDataPrefetch::run() { // If PrefetchDistance is not set, don't run the pass. This gives an // opportunity for targets to run this pass for selected subtargets only - // (whose TTI sets PrefetchDistance). - if (getPrefetchDistance() == 0) + // (whose TTI sets PrefetchDistance and CacheLineSize). + if (getPrefetchDistance() == 0 || TTI->getCacheLineSize() == 0) { + LLVM_DEBUG(dbgs() << "Please set both PrefetchDistance and CacheLineSize " + "for loop data prefetch.\n"); return false; - assert(TTI->getCacheLineSize() && "Cache line size is not set for target"); + } bool MadeChange = false; diff --git a/llvm/test/Transforms/LoopDataPrefetch/AArch64/pr56681.ll b/llvm/test/Transforms/LoopDataPrefetch/AArch64/pr56681.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/LoopDataPrefetch/AArch64/pr56681.ll @@ -0,0 +1,15 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt --loop-data-prefetch --prefetch-distance=3000 -debug-only=loop-data-prefetch -S < %s 2>&1 | FileCheck %s + +; REQUIRES: asserts + +; CHECK: Please set both PrefetchDistance and CacheLineSize for loop data prefetch + +define void @calc() { +; CHECK-LABEL: @calc( +; CHECK-NEXT: entry: +; CHECK-NEXT: ret void +; +entry: + ret void +}