From 5793838fc8efac8ffbdc71e49d287ddec8a4f749 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sat, 1 Nov 2014 16:46:18 +0000 Subject: [PATCH] Remove redundant calls to isMaterializable. This removes calls to isMaterializable in the following cases: * It was redundant with a call to isDeclaration now that isDeclaration returns the correct answer for materializable functions. * It was followed by a call to Materialize. Just call Materialize and check EC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221050 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Bitcode/Reader/BitcodeReader.cpp | 6 ++---- lib/IR/LegacyPassManager.cpp | 6 ++---- lib/IR/Verifier.cpp | 4 ++-- lib/Linker/LinkModules.cpp | 12 ++++-------- lib/Target/AArch64/AArch64Subtarget.cpp | 8 +------- lib/Target/ARM/ARMSubtarget.cpp | 6 +----- lib/Target/PowerPC/PPCSubtarget.cpp | 4 +--- lib/Target/X86/X86Subtarget.cpp | 7 +------ tools/gold/gold-plugin.cpp | 6 ++---- tools/llvm-extract/llvm-extract.cpp | 13 +++++-------- 10 files changed, 21 insertions(+), 51 deletions(-) diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 164f4963394..9e20ba628d3 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3357,10 +3357,8 @@ std::error_code BitcodeReader::MaterializeModule(Module *M) { // disk. for (Module::iterator F = TheModule->begin(), E = TheModule->end(); F != E; ++F) { - if (F->isMaterializable()) { - if (std::error_code EC = materialize(F)) - return EC; - } + if (std::error_code EC = materialize(F)) + return EC; } // At this point, if there are any function bodies, the current bit is // pointing to the END_BLOCK record after them. Now make sure the rest diff --git a/lib/IR/LegacyPassManager.cpp b/lib/IR/LegacyPassManager.cpp index 1081f2a1b8c..28fa74cbfda 100644 --- a/lib/IR/LegacyPassManager.cpp +++ b/lib/IR/LegacyPassManager.cpp @@ -1403,10 +1403,8 @@ void FunctionPassManager::add(Pass *P) { /// so, return true. /// bool FunctionPassManager::run(Function &F) { - if (F.isMaterializable()) { - if (std::error_code EC = F.materialize()) - report_fatal_error("Error reading bitcode file: " + EC.message()); - } + if (std::error_code EC = F.materialize()) + report_fatal_error("Error reading bitcode file: " + EC.message()); return FPM->run(F); } diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index e2fb62fdeef..1c54e9b062e 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -377,8 +377,8 @@ void Verifier::visit(Instruction &I) { void Verifier::visitGlobalValue(const GlobalValue &GV) { - Assert1(!GV.isDeclaration() || GV.isMaterializable() || - GV.hasExternalLinkage() || GV.hasExternalWeakLinkage(), + Assert1(!GV.isDeclaration() || GV.hasExternalLinkage() || + GV.hasExternalWeakLinkage(), "Global is external, but doesn't have external or weak linkage!", &GV); diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 94d93ca4a46..3e8eb25999f 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -1517,10 +1517,8 @@ bool ModuleLinker::run() { } // Materialize if needed. - if (SF->isMaterializable()) { - if (std::error_code EC = SF->materialize()) - return emitError(EC.message()); - } + if (std::error_code EC = SF->materialize()) + return emitError(EC.message()); // Skip if no body (function is external). if (SF->isDeclaration()) @@ -1568,10 +1566,8 @@ bool ModuleLinker::run() { } // Materialize if needed. - if (SF->isMaterializable()) { - if (std::error_code EC = SF->materialize()) - return emitError(EC.message()); - } + if (std::error_code EC = SF->materialize()) + return emitError(EC.message()); // Skip if no body (function is external). if (SF->isDeclaration()) diff --git a/lib/Target/AArch64/AArch64Subtarget.cpp b/lib/Target/AArch64/AArch64Subtarget.cpp index 4ccd57661cb..47b5d546955 100644 --- a/lib/Target/AArch64/AArch64Subtarget.cpp +++ b/lib/Target/AArch64/AArch64Subtarget.cpp @@ -65,13 +65,7 @@ AArch64Subtarget::AArch64Subtarget(const std::string &TT, unsigned char AArch64Subtarget::ClassifyGlobalReference(const GlobalValue *GV, const TargetMachine &TM) const { - - // Determine whether this is a reference to a definition or a declaration. - // Materializable GVs (in JIT lazy compilation mode) do not require an extra - // load from stub. - bool isDecl = GV->hasAvailableExternallyLinkage(); - if (GV->isDeclaration() && !GV->isMaterializable()) - isDecl = true; + bool isDecl = GV->isDeclarationForLinker(); // MachO large model always goes via a GOT, simply to get a single 8-byte // absolute relocation on all global addresses. diff --git a/lib/Target/ARM/ARMSubtarget.cpp b/lib/Target/ARM/ARMSubtarget.cpp index df17e7590d9..e53cef17140 100644 --- a/lib/Target/ARM/ARMSubtarget.cpp +++ b/lib/Target/ARM/ARMSubtarget.cpp @@ -337,11 +337,7 @@ ARMSubtarget::GVIsIndirectSymbol(const GlobalValue *GV, if (RelocM == Reloc::Static) return false; - // Materializable GVs (in JIT lazy compilation mode) do not require an extra - // load from stub. - bool isDecl = GV->hasAvailableExternallyLinkage(); - if (GV->isDeclaration() && !GV->isMaterializable()) - isDecl = true; + bool isDecl = GV->isDeclarationForLinker(); if (!isTargetMachO()) { // Extra load is needed for all externally visible. diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp index d6b964d372c..04e7ec66e5b 100644 --- a/lib/Target/PowerPC/PPCSubtarget.cpp +++ b/lib/Target/PowerPC/PPCSubtarget.cpp @@ -180,9 +180,7 @@ bool PPCSubtarget::hasLazyResolverStub(const GlobalValue *GV, // We never have stubs if HasLazyResolverStubs=false or if in static mode. if (!HasLazyResolverStubs || TM.getRelocationModel() == Reloc::Static) return false; - // If symbol visibility is hidden, the extra load is not needed if - // the symbol is definitely defined in the current translation unit. - bool isDecl = GV->isDeclaration() && !GV->isMaterializable(); + bool isDecl = GV->isDeclaration(); if (GV->hasHiddenVisibility() && !isDecl && !GV->hasCommonLinkage()) return false; return GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() || diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp index 82d62b4a365..6d55b84e738 100644 --- a/lib/Target/X86/X86Subtarget.cpp +++ b/lib/Target/X86/X86Subtarget.cpp @@ -68,12 +68,7 @@ ClassifyGlobalReference(const GlobalValue *GV, const TargetMachine &TM) const { if (GV->hasDLLImportStorageClass()) return X86II::MO_DLLIMPORT; - // Determine whether this is a reference to a definition or a declaration. - // Materializable GVs (in JIT lazy compilation mode) do not require an extra - // load from stub. - bool isDecl = GV->hasAvailableExternallyLinkage(); - if (GV->isDeclaration() && !GV->isMaterializable()) - isDecl = true; + bool isDecl = GV->isDeclarationForLinker(); // X86-64 in PIC mode. if (isPICStyleRIPRel()) { diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 25089ba4188..87d7a4fa0ad 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -471,10 +471,8 @@ static GlobalObject *makeInternalReplacement(GlobalObject *GO) { Module *M = GO->getParent(); GlobalObject *Ret; if (auto *F = dyn_cast(GO)) { - if (F->isMaterializable()) { - if (F->materialize()) - message(LDPL_FATAL, "LLVM gold plugin has failed to read a function"); - + if (F->materialize()) + message(LDPL_FATAL, "LLVM gold plugin has failed to read a function"); } auto *NewF = Function::Create(F->getFunctionType(), F->getLinkage(), diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp index fe97a03c034..53b2f0d00f4 100644 --- a/tools/llvm-extract/llvm-extract.cpp +++ b/tools/llvm-extract/llvm-extract.cpp @@ -216,19 +216,16 @@ int main(int argc, char **argv) { if (!DeleteFn) for (size_t i = 0, e = GVs.size(); i != e; ++i) { GlobalValue *GV = GVs[i]; - if (GV->isMaterializable()) { - if (std::error_code EC = GV->materialize()) { - errs() << argv[0] << ": error reading input: " << EC.message() - << "\n"; - return 1; - } + if (std::error_code EC = GV->materialize()) { + errs() << argv[0] << ": error reading input: " << EC.message() << "\n"; + return 1; } } else { // Deleting. Materialize every GV that's *not* in GVs. SmallPtrSet GVSet(GVs.begin(), GVs.end()); for (auto &G : M->globals()) { - if (!GVSet.count(&G) && G.isMaterializable()) { + if (!GVSet.count(&G)) { if (std::error_code EC = G.materialize()) { errs() << argv[0] << ": error reading input: " << EC.message() << "\n"; @@ -237,7 +234,7 @@ int main(int argc, char **argv) { } } for (auto &F : *M) { - if (!GVSet.count(&F) && F.isMaterializable()) { + if (!GVSet.count(&F)) { if (std::error_code EC = F.materialize()) { errs() << argv[0] << ": error reading input: " << EC.message() << "\n"; -- 2.34.1