diff options
author | Chris Lattner <sabre@nondot.org> | 2005-09-26 02:19:27 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-09-26 02:19:27 +0000 |
commit | 7d8e58f38425692e203edc45e87dcf3dcd65dae6 (patch) | |
tree | 40d7c21374cf1871fa5415469c99098a1b7da283 /lib/Transforms/IPO/GlobalOpt.cpp | |
parent | b1ab4580478c90375abec5e2b6e89dc1a15fa98b (diff) |
Make the global opt optimizer work on modules with a null terminator, by
accepting the null even with a non-65535 init prio
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23434 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO/GlobalOpt.cpp')
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index 03f8bf0d38..b016314653 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -1144,15 +1144,17 @@ GlobalVariable *GlobalOpt::FindGlobalCtors(Module &M) { if (!CA) return 0; for (unsigned i = 0, e = CA->getNumOperands(); i != e; ++i) if (ConstantStruct *CS = dyn_cast<ConstantStruct>(CA->getOperand(i))) { + if (isa<ConstantPointerNull>(CS->getOperand(1))) + continue; + + // Must have a function or null ptr. + if (!isa<Function>(CS->getOperand(1))) + return 0; + // Init priority must be standard. ConstantInt *CI = dyn_cast<ConstantInt>(CS->getOperand(0)); if (!CI || CI->getRawValue() != 65535) return 0; - - // Must have a function or null ptr. - if (!isa<Function>(CS->getOperand(1)) && - !isa<ConstantPointerNull>(CS->getOperand(1))) - return 0; } else { return 0; } @@ -1185,9 +1187,11 @@ bool GlobalOpt::OptimizeGlobalCtorsList(GlobalVariable *&GCL) { Function *F = Ctors[i]; // Found a null terminator in the middle of the list, prune off the rest of // the list. - if (F == 0 && i != Ctors.size()-1) { - Ctors.resize(i+1); - MadeChange = true; + if (F == 0) { + if (i != Ctors.size()-1) { + Ctors.resize(i+1); + MadeChange = true; + } break; } @@ -1217,6 +1221,7 @@ bool GlobalOpt::OptimizeGlobalCtorsList(GlobalVariable *&GCL) { std::vector<const Type*>(), false); const PointerType *PFTy = PointerType::get(FTy); CSVals[1] = Constant::getNullValue(PFTy); + CSVals[0] = ConstantSInt::get(Type::IntTy, 2147483647); } CAList.push_back(ConstantStruct::get(CSVals)); } |