[PATCH] D82071: [IR] Convert profile metadata in createCallMatchingInvoke()
Yevgeny Rouban via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 18 00:30:49 PDT 2020
yrouban created this revision.
yrouban added reviewers: hans, bkramer, w2yehia, xur.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
When an invoke instruction is converted to a call its profile metadata is dropped because it has incompatible format (see https://reviews.llvm.org/D81996).
This patch adds an attempt to convert profile data to format of the call instruction. This used to work well before the patch https://reviews.llvm.org/D80618.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D82071
Files:
llvm/lib/Transforms/Utils/Local.cpp
llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll
Index: llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll
===================================================================
--- llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll
+++ llvm/test/Transforms/SimplifyCFG/invoke_unwind.ll
@@ -6,8 +6,7 @@
; instructions to call instructions if the handler just rethrows the exception.
define i32 @test1() personality i32 (...)* @__gxx_personality_v0 {
; CHECK-LABEL: @test1(
-; CHECK-NEXT: call void @bar()
-; CHECK-NOT: !prof
+; CHECK-NEXT: call void @bar(), !prof ![[PROF:[0-9]+]]
; CHECK-NEXT: ret i32 0
invoke void @bar( )
to label %1 unwind label %Rethrow, !prof !0
@@ -18,7 +17,7 @@
resume { i8*, i32 } %exn
}
-!0 = !{!"branch_weights", i32 369, i32 0}
+!0 = !{!"branch_weights", i32 369, i32 2}
define i32 @test2() personality i32 (...)* @__gxx_personality_v0 {
; CHECK-LABEL: @test2(
@@ -76,3 +75,5 @@
}
declare i32 @__gxx_personality_v0(...)
+
+; CHECK: ![[PROF]] = !{!"branch_weights", i32 371}
Index: llvm/lib/Transforms/Utils/Local.cpp
===================================================================
--- llvm/lib/Transforms/Utils/Local.cpp
+++ llvm/lib/Transforms/Utils/Local.cpp
@@ -1986,9 +1986,16 @@
NewCall->setDebugLoc(II->getDebugLoc());
NewCall->copyMetadata(*II);
- // If the invoke had profile metadata, drop it.
- if (NewCall->hasMetadata(LLVMContext::MD_prof))
- NewCall->setMetadata(LLVMContext::MD_prof, nullptr);
+ // If the invoke had profile metadata, try converting them for CallInst.
+ uint64_t TotalWeight;
+ if (NewCall->extractProfTotalWeight(TotalWeight)) {
+ // Set the total weight if it fits into i32, otherwise reset.
+ MDBuilder MDB(NewCall->getContext());
+ auto NewWeights = uint32_t(TotalWeight) != TotalWeight
+ ? nullptr
+ : MDB.createBranchWeights({uint32_t(TotalWeight)});
+ NewCall->setMetadata(LLVMContext::MD_prof, NewWeights);
+ }
return NewCall;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82071.271588.patch
Type: text/x-patch
Size: 1990 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200618/42d6e74f/attachment.bin>
More information about the llvm-commits
mailing list