OSDN Git Service

Fix PR28219: Use profile summary from reader and not compute it
authorEaswaran Raman <eraman@google.com>
Tue, 21 Jun 2016 19:29:49 +0000 (19:29 +0000)
committerEaswaran Raman <eraman@google.com>
Tue, 21 Jun 2016 19:29:49 +0000 (19:29 +0000)
Differentiaal revision: http://reviews.llvm.org/D21546

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273301 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Instrumentation/PGOInstrumentation.cpp
test/Transforms/PGOProfile/Inputs/PR28219.proftext [new file with mode: 0644]
test/Transforms/PGOProfile/PR28219.ll [new file with mode: 0644]

index 6168f9e..27f32b3 100644 (file)
@@ -879,7 +879,6 @@ static bool annotateAllFunctions(
 
   std::vector<Function *> HotFunctions;
   std::vector<Function *> ColdFunctions;
-  InstrProfSummaryBuilder Builder(ProfileSummaryBuilder::DefaultCutoffs);
   for (auto &F : M) {
     if (F.isDeclaration())
       continue;
@@ -891,15 +890,13 @@ static bool annotateAllFunctions(
     Func.populateCounters();
     Func.setBranchWeights();
     Func.annotateIndirectCallSites();
-    if (!Func.getProfileRecord().Counts.empty())
-      Builder.addRecord(Func.getProfileRecord());
     PGOUseFunc::FuncFreqAttr FreqAttr = Func.getFuncFreqAttr();
     if (FreqAttr == PGOUseFunc::FFA_Cold)
       ColdFunctions.push_back(&F);
     else if (FreqAttr == PGOUseFunc::FFA_Hot)
       HotFunctions.push_back(&F);
   }
-  M.setProfileSummary(Builder.getSummary()->getMD(M.getContext()));
+  M.setProfileSummary(PGOReader->getSummary().getMD(M.getContext()));
   // Set function hotness attribute from the profile.
   // We have to apply these attributes at the end because their presence
   // can affect the BranchProbabilityInfo of any callers, resulting in an
diff --git a/test/Transforms/PGOProfile/Inputs/PR28219.proftext b/test/Transforms/PGOProfile/Inputs/PR28219.proftext
new file mode 100644 (file)
index 0000000..7ebc13c
--- /dev/null
@@ -0,0 +1,10 @@
+# :ir is the flag to indicate this is IR level profile.
+:ir
+@bar
+256
+1
+2
+@foo
+512
+1
+3
diff --git a/test/Transforms/PGOProfile/PR28219.ll b/test/Transforms/PGOProfile/PR28219.ll
new file mode 100644 (file)
index 0000000..a0e1904
--- /dev/null
@@ -0,0 +1,12 @@
+; Test that we annotate entire program's summary and not just this module's
+; RUN: llvm-profdata merge %S/Inputs/PR28219.proftext -o %t.profdata
+; RUN: opt < %s -pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s
+
+define i32 @bar() {
+entry:
+  ret i32 1
+}
+; CHECK-DAG: {{![0-9]+}} = !{i32 1, !"ProfileSummary", {{![0-9]+}}}
+; CHECK-DAG: {{![0-9]+}} = !{!"NumFunctions", i64 2}
+; CHECK-DAG: {{![0-9]+}} = !{!"MaxFunctionCount", i64 3}
+