[PATCH] D110271: [llvm-profgen] Fix an out-of-range error during unwinding
Lei Wang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 22 16:40:26 PDT 2021
wlei updated this revision to Diff 374397.
wlei added a comment.
Updating D110271 <https://reviews.llvm.org/D110271>: [llvm-profgen] Fix an out-of-range error during unwinding
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110271/new/
https://reviews.llvm.org/D110271
Files:
llvm/tools/llvm-profgen/PerfReader.cpp
Index: llvm/tools/llvm-profgen/PerfReader.cpp
===================================================================
--- llvm/tools/llvm-profgen/PerfReader.cpp
+++ llvm/tools/llvm-profgen/PerfReader.cpp
@@ -60,20 +60,33 @@
// converted to a list of pseudo probes to report in ProfileGenerator.
State.getParentFrame()->recordRangeCount(Target, End, Repeat);
} else {
- // Unwind linear execution part
- uint64_t LeafAddr = State.CurrentLeafFrame->Address;
- while (IP.Address >= Target) {
+ // Unwind linear execution part.
+ // Split and record the range by different inline context. For example:
+ // [0x01] ... main:1 # Target
+ // [0x02] ... main:2
+ // [0x03] ... main:3 @ foo:1
+ // [0x04] ... main:3 @ foo:2
+ // [0x05] ... main:3 @ foo:3
+ // [0x06] ... main:4
+ // [0x07] ... main:5 # End
+ // It will be recorded:
+ // [main:*] : [0x06, 0x07], [0x01, 0x02]
+ // [main:3 @ foo:*] : [0x03, 0x05]
+ while (IP.Address > Target) {
uint64_t PrevIP = IP.Address;
IP.backward();
// Break into segments for implicit call/return due to inlining
bool SameInlinee = Binary->inlineContextEqual(PrevIP, IP.Address);
- if (!SameInlinee || PrevIP == Target) {
- State.switchToFrame(LeafAddr);
+ if (!SameInlinee) {
+ State.switchToFrame(End);
State.CurrentLeafFrame->recordRangeCount(PrevIP, End, Repeat);
End = IP.Address;
}
- LeafAddr = IP.Address;
}
+ assert(IP.Address == Target && "The last one must be the target address.");
+ // Record the remaining range, [0x01, 0x02] in the example
+ State.switchToFrame(End);
+ State.CurrentLeafFrame->recordRangeCount(IP.Address, End, Repeat);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110271.374397.patch
Type: text/x-patch
Size: 1775 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210922/65c77e32/attachment.bin>
More information about the llvm-commits
mailing list