[PATCH] D129009: [LTO] Fix LTO for aliased IFuncs

Schrodinger ZHU Yifan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 1 17:13:53 PDT 2022


SchrodingerZhu updated this revision to Diff 441820.
SchrodingerZhu added a comment.

address CR


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129009/new/

https://reviews.llvm.org/D129009

Files:
  llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
  llvm/lib/Bitcode/Writer/BitcodeWriter.cpp


Index: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
===================================================================
--- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -4103,8 +4103,7 @@
 
   for (const GlobalAlias &A : M.aliases()) {
     auto *Aliasee = A.getAliaseeObject();
-    if (!Aliasee->hasName() ||
-        Aliasee->getValueID() == Value::ValueTy::GlobalIFuncVal)
+    if (!Aliasee->hasName() || isa<GlobalIFunc>(Aliasee))
       // IFunc function and Nameless function don't have an entry in the
       // summary, skip it.
       continue;
Index: llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
===================================================================
--- llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
+++ llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
@@ -649,23 +649,24 @@
 static void computeAliasSummary(ModuleSummaryIndex &Index, const GlobalAlias &A,
                                 DenseSet<GlobalValue::GUID> &CantBePromoted) {
   auto *Aliasee = A.getAliaseeObject();
-  // Currently, skip summary for indirect function aliases as
+  // Skip summary for indirect function aliases as
   // summary for aliasee will not be emitted.
-  if (Aliasee->getValueID() != Value::ValueTy::GlobalIFuncVal) {
-    bool NonRenamableLocal = isNonRenamableLocal(A);
-    GlobalValueSummary::GVFlags Flags(
-        A.getLinkage(), A.getVisibility(), NonRenamableLocal,
-        /* Live = */ false, A.isDSOLocal(), A.canBeOmittedFromSymbolTable());
-    auto AS = std::make_unique<AliasSummary>(Flags);
-    auto AliaseeVI = Index.getValueInfo(Aliasee->getGUID());
-    assert(AliaseeVI && "Alias expects aliasee summary to be available");
-    assert(AliaseeVI.getSummaryList().size() == 1 &&
-           "Expected a single entry per aliasee in per-module index");
-    AS->setAliasee(AliaseeVI, AliaseeVI.getSummaryList()[0].get());
-    if (NonRenamableLocal)
-      CantBePromoted.insert(A.getGUID());
-    Index.addGlobalValueSummary(A, std::move(AS));
+  if (isa<GlobalIFunc>(Aliasee)) {
+    return;
   }
+  bool NonRenamableLocal = isNonRenamableLocal(A);
+  GlobalValueSummary::GVFlags Flags(
+      A.getLinkage(), A.getVisibility(), NonRenamableLocal,
+      /* Live = */ false, A.isDSOLocal(), A.canBeOmittedFromSymbolTable());
+  auto AS = std::make_unique<AliasSummary>(Flags);
+  auto AliaseeVI = Index.getValueInfo(Aliasee->getGUID());
+  assert(AliaseeVI && "Alias expects aliasee summary to be available");
+  assert(AliaseeVI.getSummaryList().size() == 1 &&
+         "Expected a single entry per aliasee in per-module index");
+  AS->setAliasee(AliaseeVI, AliaseeVI.getSummaryList()[0].get());
+  if (NonRenamableLocal)
+    CantBePromoted.insert(A.getGUID());
+  Index.addGlobalValueSummary(A, std::move(AS));
 }
 
 // Set LiveRoot flag on entries matching the given value name.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D129009.441820.patch
Type: text/x-patch
Size: 2853 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220702/0f41833f/attachment.bin>


More information about the cfe-commits mailing list