From: Xinliang David Li Date: Thu, 30 Nov 2017 19:16:25 +0000 (+0000) Subject: [PGO] Skip counter promotion for infinite loops X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=64d8eced837e39fb4d39de7683072f7a2c4d4f2a;p=llvm [PGO] Skip counter promotion for infinite loops Differential Revision: http://reviews.llvm.org/D40662 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319462 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Instrumentation/InstrProfiling.cpp b/lib/Transforms/Instrumentation/InstrProfiling.cpp index db8fa897794..787afc32dfb 100644 --- a/lib/Transforms/Instrumentation/InstrProfiling.cpp +++ b/lib/Transforms/Instrumentation/InstrProfiling.cpp @@ -245,6 +245,9 @@ public: } bool run(int64_t *NumPromoted) { + // Skip 'infinite' loops: + if (ExitBlocks.size() == 0) + return false; unsigned MaxProm = getMaxNumOfPromotionsInLoop(&L); if (MaxProm == 0) return false; diff --git a/test/Transforms/PGOProfile/infinite_loop.ll b/test/Transforms/PGOProfile/infinite_loop.ll new file mode 100644 index 00000000000..68e9873f092 --- /dev/null +++ b/test/Transforms/PGOProfile/infinite_loop.ll @@ -0,0 +1,21 @@ +; RUN: opt < %s -instrprof -S -o - -do-counter-promotion=1 | FileCheck %s +; CHECK: store + +@__profn_foo = private constant [3 x i8] c"foo" + +define void @foo() { +entry: + br label %while.body + + while.body: ; preds = %entry, %while.body + call void @llvm.instrprof.increment(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @__profn_foo, i32 0, i32 0), i64 14813359968, i32 1, i32 0) + call void (...) @bar() #2 + br label %while.body +} + +declare void @bar(...) + +declare void @llvm.instrprof.increment(i8*, i64, i32, i32) #0 + +attributes #0 = { nounwind } +