summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/Utils')
-rw-r--r--llvm/lib/Transforms/Utils/FunctionImportUtils.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp b/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp
index b9b3606ecfb..d1710feba9d 100644
--- a/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp
+++ b/llvm/lib/Transforms/Utils/FunctionImportUtils.cpp
@@ -67,10 +67,25 @@ bool FunctionImportGlobalProcessing::shouldPromoteLocalToGlobal(
if (GVar && GVar->isConstant() && GVar->hasGlobalUnnamedAddr())
return false;
- auto *Summary = ImportIndex.getGlobalValueSummary(SGV->getGUID());
- assert(Summary && "Missing summary for global value");
- if (Summary->noRename())
- return false;
+ // If we are exporting, we need to see whether this value is marked
+ // as NoRename in the summary. If we are importing, we may not have
+ // a summary in the distributed backend case (only summaries for values
+ // importes as defs, not references, are included in the index passed
+ // to the distributed backends).
+ auto Summaries = ImportIndex.findGlobalValueSummaryList(SGV->getGUID());
+ if (Summaries == ImportIndex.end())
+ // Assert that this is an import - we should always have access to the
+ // summary when exporting.
+ assert(isPerformingImport() &&
+ "Missing summary for global value when exporting");
+ else {
+ assert(Summaries->second.size() == 1 && "Local has more than one summary");
+ if (Summaries->second.front()->noRename()) {
+ assert((isModuleExporting() || !GlobalsToImport->count(SGV)) &&
+ "Imported a non-renamable local value");
+ return false;
+ }
+ }
// Eventually we only need to promote functions in the exporting module that
// are referenced by a potentially exported function (i.e. one that is in the
OpenPOWER on IntegriCloud