[llvm] r266173 - Minor cleanup in Internalize, hide helper class using anonymous namespace (NFC)

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 12 23:32:30 PDT 2016


Author: mehdi_amini
Date: Wed Apr 13 01:32:29 2016
New Revision: 266173

URL: http://llvm.org/viewvc/llvm-project?rev=266173&view=rev
Log:
Minor cleanup in Internalize, hide helper class using anonymous namespace (NFC)

From: Mehdi Amini <mehdi.amini at apple.com>

Added:
    llvm/trunk/lib/LTO/PreserveLibCalls.cpp
      - copied, changed from r266172, llvm/trunk/lib/LTO/LTOInternalize.cpp
    llvm/trunk/lib/LTO/PreserveLibCalls.h
      - copied, changed from r266172, llvm/trunk/lib/LTO/LTOInternalize.h
Removed:
    llvm/trunk/lib/LTO/LTOInternalize.cpp
    llvm/trunk/lib/LTO/LTOInternalize.h
Modified:
    llvm/trunk/lib/Transforms/IPO/Internalize.cpp

Removed: llvm/trunk/lib/LTO/LTOInternalize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOInternalize.cpp?rev=266172&view=auto
==============================================================================
--- llvm/trunk/lib/LTO/LTOInternalize.cpp (original)
+++ llvm/trunk/lib/LTO/LTOInternalize.cpp (removed)
@@ -1,158 +0,0 @@
-//==-LTOInternalize.cpp - LLVM Link Time Optimizer Internalization Utility -==//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines a helper to run the internalization part of LTO.
-//
-//===----------------------------------------------------------------------===//
-
-#include "LTOInternalize.h"
-
-#include "llvm/Analysis/TargetLibraryInfo.h"
-#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/IR/Mangler.h"
-#include "llvm/Target/TargetLowering.h"
-#include "llvm/Target/TargetSubtargetInfo.h"
-#include "llvm/Transforms/IPO/Internalize.h"
-
-using namespace llvm;
-
-namespace {
-// Helper class that populate the array of symbols used in inlined assembly.
-class ComputeAsmUsed {
-public:
-  ComputeAsmUsed(const StringSet<> &AsmUndefinedRefs, const TargetMachine &TM,
-                 const Module &TheModule,
-                 SmallPtrSetImpl<const GlobalValue *> &AsmUsed)
-      : AsmUndefinedRefs(AsmUndefinedRefs), TM(TM), AsmUsed(AsmUsed) {
-    accumulateAndSortLibcalls(TheModule);
-    for (const Function &F : TheModule)
-      findAsmUses(F);
-    for (const GlobalVariable &GV : TheModule.globals())
-      findAsmUses(GV);
-    for (const GlobalAlias &GA : TheModule.aliases())
-      findAsmUses(GA);
-  }
-
-private:
-  // Inputs
-  const StringSet<> &AsmUndefinedRefs;
-  const TargetMachine &TM;
-
-  // Temps
-  llvm::Mangler Mangler;
-  StringSet<> Libcalls;
-
-  // Output
-  SmallPtrSetImpl<const GlobalValue *> &AsmUsed;
-
-  // Collect names of runtime library functions. User-defined functions with the
-  // same names are added to llvm.compiler.used to prevent them from being
-  // deleted by optimizations.
-  void accumulateAndSortLibcalls(const Module &TheModule) {
-    TargetLibraryInfoImpl TLII(Triple(TM.getTargetTriple()));
-    TargetLibraryInfo TLI(TLII);
-
-    // TargetLibraryInfo has info on C runtime library calls on the current
-    // target.
-    for (unsigned I = 0, E = static_cast<unsigned>(LibFunc::NumLibFuncs);
-         I != E; ++I) {
-      LibFunc::Func F = static_cast<LibFunc::Func>(I);
-      if (TLI.has(F))
-        Libcalls.insert(TLI.getName(F));
-    }
-
-    SmallPtrSet<const TargetLowering *, 1> TLSet;
-
-    for (const Function &F : TheModule) {
-      const TargetLowering *Lowering =
-          TM.getSubtargetImpl(F)->getTargetLowering();
-
-      if (Lowering && TLSet.insert(Lowering).second)
-        // TargetLowering has info on library calls that CodeGen expects to be
-        // available, both from the C runtime and compiler-rt.
-        for (unsigned I = 0, E = static_cast<unsigned>(RTLIB::UNKNOWN_LIBCALL);
-             I != E; ++I)
-          if (const char *Name =
-                  Lowering->getLibcallName(static_cast<RTLIB::Libcall>(I)))
-            Libcalls.insert(Name);
-    }
-  }
-
-  void findAsmUses(const GlobalValue &GV) {
-    // There are no restrictions to apply to declarations.
-    if (GV.isDeclaration())
-      return;
-
-    // There is nothing more restrictive than private linkage.
-    if (GV.hasPrivateLinkage())
-      return;
-
-    SmallString<64> Buffer;
-    TM.getNameWithPrefix(Buffer, &GV, Mangler);
-
-    if (AsmUndefinedRefs.count(Buffer))
-      AsmUsed.insert(&GV);
-
-    // Conservatively append user-supplied runtime library functions to
-    // llvm.compiler.used.  These could be internalized and deleted by
-    // optimizations like -globalopt, causing problems when later optimizations
-    // add new library calls (e.g., llvm.memset => memset and printf => puts).
-    // Leave it to the linker to remove any dead code (e.g. with -dead_strip).
-    if (isa<Function>(GV) && Libcalls.count(GV.getName()))
-      AsmUsed.insert(&GV);
-  }
-};
-
-} // namespace anonymous
-
-static void findUsedValues(GlobalVariable *LLVMUsed,
-                           SmallPtrSetImpl<const GlobalValue *> &UsedValues) {
-  if (!LLVMUsed)
-    return;
-
-  ConstantArray *Inits = cast<ConstantArray>(LLVMUsed->getInitializer());
-  for (unsigned i = 0, e = Inits->getNumOperands(); i != e; ++i)
-    if (GlobalValue *GV =
-            dyn_cast<GlobalValue>(Inits->getOperand(i)->stripPointerCasts()))
-      UsedValues.insert(GV);
-}
-
-// mark which symbols can not be internalized
-void llvm::LTOInternalize(
-    Module &TheModule, const TargetMachine &TM,
-    const std::function<bool(const GlobalValue &)> &MustPreserveSymbols,
-    const StringSet<> &AsmUndefinedRefs) {
-  SmallPtrSet<const GlobalValue *, 8> AsmUsed;
-  ComputeAsmUsed(AsmUndefinedRefs, TM, TheModule, AsmUsed);
-
-  GlobalVariable *LLVMCompilerUsed =
-      TheModule.getGlobalVariable("llvm.compiler.used");
-  findUsedValues(LLVMCompilerUsed, AsmUsed);
-  if (LLVMCompilerUsed)
-    LLVMCompilerUsed->eraseFromParent();
-
-  if (!AsmUsed.empty()) {
-    llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(TheModule.getContext());
-    std::vector<Constant *> asmUsed2;
-    for (const auto *GV : AsmUsed) {
-      Constant *c =
-          ConstantExpr::getBitCast(const_cast<GlobalValue *>(GV), i8PTy);
-      asmUsed2.push_back(c);
-    }
-
-    llvm::ArrayType *ATy = llvm::ArrayType::get(i8PTy, asmUsed2.size());
-    LLVMCompilerUsed = new llvm::GlobalVariable(
-        TheModule, ATy, false, llvm::GlobalValue::AppendingLinkage,
-        llvm::ConstantArray::get(ATy, asmUsed2), "llvm.compiler.used");
-
-    LLVMCompilerUsed->setSection("llvm.metadata");
-  }
-
-  internalizeModule(TheModule, MustPreserveSymbols);
-}

Removed: llvm/trunk/lib/LTO/LTOInternalize.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOInternalize.h?rev=266172&view=auto
==============================================================================
--- llvm/trunk/lib/LTO/LTOInternalize.h (original)
+++ llvm/trunk/lib/LTO/LTOInternalize.h (removed)
@@ -1,32 +0,0 @@
-//===-LTOInternalize.h - LLVM Link Time Optimizer Internalization Utility -===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file declares a helper class to run the internalization part of LTO.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LTO_LTOINTERNALIZE_H
-#define LLVM_LTO_LTOINTERNALIZE_H
-
-#include "llvm/ADT/StringSet.h"
-#include "llvm/IR/GlobalValue.h"
-
-#include <functional>
-
-namespace llvm {
-class Module;
-class TargetMachine;
-
-void LTOInternalize(
-    Module &TheModule, const TargetMachine &TM,
-    const std::function<bool(const GlobalValue &)> &MustPreserveSymbols,
-    const StringSet<> &AsmUndefinedRefs);
-}
-
-#endif // LLVM_LTO_LTOINTERNALIZE_H

Copied: llvm/trunk/lib/LTO/PreserveLibCalls.cpp (from r266172, llvm/trunk/lib/LTO/LTOInternalize.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/PreserveLibCalls.cpp?p2=llvm/trunk/lib/LTO/PreserveLibCalls.cpp&p1=llvm/trunk/lib/LTO/LTOInternalize.cpp&r1=266172&r2=266173&rev=266173&view=diff
==============================================================================
    (empty)

Copied: llvm/trunk/lib/LTO/PreserveLibCalls.h (from r266172, llvm/trunk/lib/LTO/LTOInternalize.h)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/PreserveLibCalls.h?p2=llvm/trunk/lib/LTO/PreserveLibCalls.h&p1=llvm/trunk/lib/LTO/LTOInternalize.h&r1=266172&r2=266173&rev=266173&view=diff
==============================================================================
    (empty)

Modified: llvm/trunk/lib/Transforms/IPO/Internalize.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Internalize.cpp?rev=266173&r1=266172&r2=266173&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/Internalize.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/Internalize.cpp Wed Apr 13 01:32:29 2016
@@ -117,11 +117,6 @@ public:
     AU.addPreserved<CallGraphWrapperPass>();
   }
 };
-} // end anonymous namespace
-
-char InternalizePass::ID = 0;
-INITIALIZE_PASS(InternalizePass, "internalize", "Internalize Global Symbols",
-                false, false)
 
 // Helper class to perform internalization.
 class Internalizer {
@@ -299,6 +294,12 @@ bool Internalizer::internalizeModule(Mod
   return Changed;
 }
 
+} // end anonymous namespace
+
+char InternalizePass::ID = 0;
+INITIALIZE_PASS(InternalizePass, "internalize", "Internalize Global Symbols",
+                false, false)
+
 /// Public API below
 
 bool llvm::internalizeModule(




More information about the llvm-commits mailing list