diff options
author | Hal Finkel <hfinkel@anl.gov> | 2017-01-07 20:21:17 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2017-01-07 20:21:17 +0000 |
commit | ec85fc5eac04171da9dd70dc6b391b02e87ee66c (patch) | |
tree | d85bd907003640ffcfd9d071a5b9423c0d59c683 /llvm/tools/llvm-opt-report/OptReport.cpp | |
parent | 0ba25a5cef4f39bc38bfd0dbd1f1111a5afa972e (diff) | |
download | bcm5719-llvm-ec85fc5eac04171da9dd70dc6b391b02e87ee66c.tar.gz bcm5719-llvm-ec85fc5eac04171da9dd70dc6b391b02e87ee66c.zip |
[llvm-opt-report] Fix context-sensitive lines where nothing happened
Don't print a line multiple times, each for different inlining contexts, if
nothing happened in any context. This prevents situations like this:
[[
> main:
65 | if ((i * ni + j) % 20 == 0) fprintf
> print_array:
65 | if ((i * ni + j) % 20 == 0) fprintf
]]
which could happen if different optimizations were missed in different inlining
contexts.
llvm-svn: 291361
Diffstat (limited to 'llvm/tools/llvm-opt-report/OptReport.cpp')
-rw-r--r-- | llvm/tools/llvm-opt-report/OptReport.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/tools/llvm-opt-report/OptReport.cpp b/llvm/tools/llvm-opt-report/OptReport.cpp index d067df5ecad..4f45dd9f2aa 100644 --- a/llvm/tools/llvm-opt-report/OptReport.cpp +++ b/llvm/tools/llvm-opt-report/OptReport.cpp @@ -358,7 +358,7 @@ static bool writeReport(LocationInfoTy &LocationInfo) { std::map<int, OptReportLocationInfo> ColsInfo; unsigned InlinedCols = 0, UnrolledCols = 0, VectorizedCols = 0; - if (LII != FileInfo.end()) { + if (LII != FileInfo.end() && !FuncNameSet.empty()) { const auto &LineInfo = LII->second; for (auto &CI : LineInfo.find(*FuncNameSet.begin())->second) { @@ -475,13 +475,21 @@ static bool writeReport(LocationInfoTy &LocationInfo) { std::map<std::map<int, OptReportLocationInfo>, std::set<std::string>> UniqueLIs; + OptReportLocationInfo AllLI; if (LII != FileInfo.end()) { const auto &FuncLineInfo = LII->second; - for (const auto &FLII : FuncLineInfo) + for (const auto &FLII : FuncLineInfo) { UniqueLIs[FLII.second].insert(FLII.first); + + for (const auto &OI : FLII.second) + AllLI |= OI.second; + } } - if (UniqueLIs.size() > 1) { + bool NothingHappened = !AllLI.Inlined.Transformed && + !AllLI.Unrolled.Transformed && + !AllLI.Vectorized.Transformed; + if (UniqueLIs.size() > 1 && !NothingHappened) { OS << " [[\n"; for (const auto &FSLI : UniqueLIs) PrintLine(true, FSLI.second); |