summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2017-01-07 20:21:17 +0000
committerHal Finkel <hfinkel@anl.gov>2017-01-07 20:21:17 +0000
commitec85fc5eac04171da9dd70dc6b391b02e87ee66c (patch)
treed85bd907003640ffcfd9d071a5b9423c0d59c683 /llvm/tools
parent0ba25a5cef4f39bc38bfd0dbd1f1111a5afa972e (diff)
downloadbcm5719-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')
-rw-r--r--llvm/tools/llvm-opt-report/OptReport.cpp14
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);
OpenPOWER on IntegriCloud