mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 12:19:53 +00:00
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
This commit is contained in:
parent
e2add4346d
commit
5793838fc8
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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())
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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() ||
|
||||
|
@ -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()) {
|
||||
|
@ -471,10 +471,8 @@ static GlobalObject *makeInternalReplacement(GlobalObject *GO) {
|
||||
Module *M = GO->getParent();
|
||||
GlobalObject *Ret;
|
||||
if (auto *F = dyn_cast<Function>(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(),
|
||||
|
@ -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<GlobalValue *, 8> 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";
|
||||
|
Loading…
Reference in New Issue
Block a user