[PATCH] D95495: Emit metadata if there is a profile hash mismatch
Sriraman Tallam via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 26 21:40:52 PST 2021
tmsriram updated this revision to Diff 319467.
tmsriram added a comment.
Update patch.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D95495/new/
https://reviews.llvm.org/D95495
Files:
llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
llvm/test/Transforms/PGOProfile/Inputs/hash_mismatch_metadata.proftext
llvm/test/Transforms/PGOProfile/hash_mismatch_metadata.ll
Index: llvm/test/Transforms/PGOProfile/hash_mismatch_metadata.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/PGOProfile/hash_mismatch_metadata.ll
@@ -0,0 +1,18 @@
+; RUN: llvm-profdata merge %S/Inputs/hash_mismatch_metadata.proftext -o %t.profdata
+; RUN: opt < %s -mtriple=x86_64-linux-gnu -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -S | FileCheck %s
+
+define void @foo() !annotation !1 {
+entry:
+ ret void
+}
+
+define void @bar() !annotation !2 {
+entry:
+ ret void
+}
+
+!1 = !{!"fake_metadata"}
+!2 = !{!"instr_prof_hash_mismatch"}
+
+; CHECK-DAG: !{{[0-9]+}} = !{!"fake_metadata", !"instr_prof_hash_mismatch"}
+; CHECK-DAG: !{{[0-9]+}} = !{!"instr_prof_hash_mismatch"}
Index: llvm/test/Transforms/PGOProfile/Inputs/hash_mismatch_metadata.proftext
===================================================================
--- /dev/null
+++ llvm/test/Transforms/PGOProfile/Inputs/hash_mismatch_metadata.proftext
@@ -0,0 +1,17 @@
+:ir
+:entry_first
+foo
+# Func Hash:
+11111
+# Num Counters:
+1
+# Counter Values:
+100
+
+bar
+# Func Hash:
+11111
+# Num Counters:
+1
+# Counter Values:
+100
Index: llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
+++ llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
@@ -1245,6 +1245,27 @@
llvm_unreachable("Cannot find the unknown count edge");
}
+// Emit function metadata indicating PGO profile mismatch.
+static void annotateFunctionWithHashMismatch(Function &F,
+ LLVMContext &ctx) {
+ const char MetadataName[] = "instr_prof_hash_mismatch";
+ SmallVector<Metadata *, 2> Names;
+ // If this metadata already exists, ignore.
+ if (MDTuple *Tuple =
+ cast<MDTuple>(F.getMetadata(LLVMContext::MD_annotation))) {
+ for (auto &N : Tuple->operands()) {
+ if (cast<MDString>(N.get())->getString() == MetadataName)
+ return;
+ Names.push_back(N.get());
+ }
+ }
+
+ MDBuilder MDB(ctx);
+ Names.push_back(MDB.createString(MetadataName));
+ MDNode *MD = MDTuple::get(ctx, Names);
+ F.setMetadata(LLVMContext::MD_annotation, MD);
+}
+
// Read the profile from ProfileFileName and assign the value to the
// instrumented BB and the edges. This function also updates ProgramMaxCount.
// Return true if the profile are successfully read, and false on errors.
@@ -1272,6 +1293,8 @@
(F.hasComdat() ||
F.getLinkage() == GlobalValue::AvailableExternallyLinkage));
LLVM_DEBUG(dbgs() << "hash mismatch (skip=" << SkipWarning << ")");
+ // Emit function metadata indicating PGO profile mismatch.
+ annotateFunctionWithHashMismatch(F, M->getContext());
}
LLVM_DEBUG(dbgs() << " IsCS=" << IsCS << "\n");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D95495.319467.patch
Type: text/x-patch
Size: 2908 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210127/cb4ce553/attachment.bin>
More information about the llvm-commits
mailing list