diff options
| author | Xinliang David Li <davidxl@google.com> | 2015-12-20 05:15:45 +0000 |
|---|---|---|
| committer | Xinliang David Li <davidxl@google.com> | 2015-12-20 05:15:45 +0000 |
| commit | 5c24da5d8e1c27f06598576c51b8d7e2784e2f17 (patch) | |
| tree | 0f05cf59968906ecd14e5987275a954d57994677 /llvm/lib | |
| parent | 68369b1c2f9f8d20d469d94fe595df06b1437c2b (diff) | |
| download | bcm5719-llvm-5c24da5d8e1c27f06598576c51b8d7e2784e2f17.tar.gz bcm5719-llvm-5c24da5d8e1c27f06598576c51b8d7e2784e2f17.zip | |
Minor clean up -- move large single use method out of header(NFC)
llvm-svn: 256113
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/ProfileData/InstrProf.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp index 481d401a4d9..9255208e012 100644 --- a/llvm/lib/ProfileData/InstrProf.cpp +++ b/llvm/lib/ProfileData/InstrProf.cpp @@ -162,6 +162,37 @@ GlobalVariable *createPGOFuncNameVar(Function &F, StringRef FuncName) { return createPGOFuncNameVar(*F.getParent(), F.getLinkage(), FuncName); } +instrprof_error +InstrProfValueSiteRecord::mergeValueData(InstrProfValueSiteRecord &Input, + uint64_t Weight) { + this->sortByTargetValues(); + Input.sortByTargetValues(); + auto I = ValueData.begin(); + auto IE = ValueData.end(); + instrprof_error Result = instrprof_error::success; + for (auto J = Input.ValueData.begin(), JE = Input.ValueData.end(); J != JE; + ++J) { + while (I != IE && I->Value < J->Value) + ++I; + if (I != IE && I->Value == J->Value) { + uint64_t JCount = J->Count; + bool Overflowed; + if (Weight > 1) { + JCount = SaturatingMultiply(JCount, Weight, &Overflowed); + if (Overflowed) + Result = instrprof_error::counter_overflow; + } + I->Count = SaturatingAdd(I->Count, JCount, &Overflowed); + if (Overflowed) + Result = instrprof_error::counter_overflow; + ++I; + continue; + } + ValueData.insert(I, *J); + } + return Result; +} + // Merge Value Profile data from Src record to this record for ValueKind. // Scale merged value counts by \p Weight. instrprof_error InstrProfRecord::mergeValueProfData(uint32_t ValueKind, |

