X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FBitcode%2FWriter%2FValueEnumerator.cpp;h=e07563b5a39023ccab14d2229fa8ffdf634e9f39;hp=53c3a4094ea60c2098e87fb7e69c1e94cdcb9308;hb=8a32dc47d61f3c12f95f5cf7dd1d67ed7c6c00cd;hpb=cf0db29df20d9c665da7e82bb261bdd7cf7f1b2b diff --git a/lib/Bitcode/Writer/ValueEnumerator.cpp b/lib/Bitcode/Writer/ValueEnumerator.cpp index 53c3a4094ea..e07563b5a39 100644 --- a/lib/Bitcode/Writer/ValueEnumerator.cpp +++ b/lib/Bitcode/Writer/ValueEnumerator.cpp @@ -52,7 +52,7 @@ struct OrderMap { IDs[V].first = ID; } }; -} // namespace +} static void orderValue(const Value *V, OrderMap &OM) { if (OM.lookup(V).first) @@ -87,15 +87,9 @@ static OrderMap orderModule(const Module &M) { if (!isa(A.getAliasee())) orderValue(A.getAliasee(), OM); for (const Function &F : M) { - if (F.hasPrefixData()) - if (!isa(F.getPrefixData())) - orderValue(F.getPrefixData(), OM); - if (F.hasPrologueData()) - if (!isa(F.getPrologueData())) - orderValue(F.getPrologueData(), OM); - if (F.hasPersonalityFn()) - if (!isa(F.getPersonalityFn())) - orderValue(F.getPersonalityFn(), OM); + for (const Use &U : F.operands()) + if (!isa(U.get())) + orderValue(U.get(), OM); } OM.LastGlobalConstantID = OM.size(); @@ -273,12 +267,8 @@ static UseListOrderStack predictUseListOrder(const Module &M) { for (const GlobalAlias &A : M.aliases()) predictValueUseListOrder(A.getAliasee(), nullptr, OM, Stack); for (const Function &F : M) { - if (F.hasPrefixData()) - predictValueUseListOrder(F.getPrefixData(), nullptr, OM, Stack); - if (F.hasPrologueData()) - predictValueUseListOrder(F.getPrologueData(), nullptr, OM, Stack); - if (F.hasPersonalityFn()) - predictValueUseListOrder(F.getPersonalityFn(), nullptr, OM, Stack); + for (const Use &U : F.operands()) + predictValueUseListOrder(U.get(), nullptr, OM, Stack); } return Stack; @@ -321,20 +311,10 @@ ValueEnumerator::ValueEnumerator(const Module &M, for (const GlobalAlias &GA : M.aliases()) EnumerateValue(GA.getAliasee()); - // Enumerate the prefix data constants. - for (const Function &F : M) - if (F.hasPrefixData()) - EnumerateValue(F.getPrefixData()); - - // Enumerate the prologue data constants. + // Enumerate any optional Function data. for (const Function &F : M) - if (F.hasPrologueData()) - EnumerateValue(F.getPrologueData()); - - // Enumerate the personality functions. - for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) - if (I->hasPersonalityFn()) - EnumerateValue(I->getPersonalityFn()); + for (const Use &U : F.operands()) + EnumerateValue(U.get()); // Enumerate the metadata type. // @@ -425,7 +405,7 @@ unsigned ValueEnumerator::getValueID(const Value *V) const { void ValueEnumerator::dump() const { print(dbgs(), ValueMap, "Default"); dbgs() << '\n'; - print(dbgs(), MDValueMap, "MetaData"); + print(dbgs(), MetadataMap, "MetaData"); dbgs() << '\n'; } @@ -512,10 +492,8 @@ void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) { /// Insert all of the values referenced by named metadata in the specified /// module. void ValueEnumerator::EnumerateNamedMetadata(const Module &M) { - for (Module::const_named_metadata_iterator I = M.named_metadata_begin(), - E = M.named_metadata_end(); - I != E; ++I) - EnumerateNamedMDNode(I); + for (const auto &I : M.named_metadata()) + EnumerateNamedMDNode(&I); } void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) { @@ -544,7 +522,7 @@ void ValueEnumerator::EnumerateMetadata(const Metadata *MD) { // EnumerateMDNodeOperands() from re-visiting MD in a cyclic graph. // // Return early if there's already an ID. - if (!MDValueMap.insert(std::make_pair(MD, 0)).second) + if (!MetadataMap.insert(std::make_pair(MD, 0)).second) return; // Visit operands first to minimize RAUW. @@ -557,10 +535,10 @@ void ValueEnumerator::EnumerateMetadata(const Metadata *MD) { HasDILocation |= isa(MD); HasGenericDINode |= isa(MD); - // Replace the dummy ID inserted above with the correct one. MDValueMap may + // Replace the dummy ID inserted above with the correct one. MetadataMap may // have changed by inserting operands, so we need a fresh lookup here. MDs.push_back(MD); - MDValueMap[MD] = MDs.size(); + MetadataMap[MD] = MDs.size(); } /// EnumerateFunctionLocalMetadataa - Incorporate function-local metadata @@ -568,12 +546,12 @@ void ValueEnumerator::EnumerateMetadata(const Metadata *MD) { void ValueEnumerator::EnumerateFunctionLocalMetadata( const LocalAsMetadata *Local) { // Check to see if it's already in! - unsigned &MDValueID = MDValueMap[Local]; - if (MDValueID) + unsigned &MetadataID = MetadataMap[Local]; + if (MetadataID) return; MDs.push_back(Local); - MDValueID = MDs.size(); + MetadataID = MDs.size(); EnumerateValue(Local->getValue()); @@ -691,9 +669,7 @@ void ValueEnumerator::EnumerateOperandType(const Value *V) { // This constant may have operands, make sure to enumerate the types in // them. - for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) { - const Value *Op = C->getOperand(i); - + for (const Value *Op : C->operands()) { // Don't enumerate basic blocks here, this happens as operands to // blockaddress. if (isa(Op)) @@ -731,23 +707,20 @@ void ValueEnumerator::incorporateFunction(const Function &F) { NumModuleMDs = MDs.size(); // Adding function arguments to the value table. - for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end(); - I != E; ++I) - EnumerateValue(I); + for (const auto &I : F.args()) + EnumerateValue(&I); FirstFuncConstantID = Values.size(); // Add all function-level constants to the value table. - for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { - for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) - for (User::const_op_iterator OI = I->op_begin(), E = I->op_end(); - OI != E; ++OI) { - if ((isa(*OI) && !isa(*OI)) || - isa(*OI)) - EnumerateValue(*OI); + for (const BasicBlock &BB : F) { + for (const Instruction &I : BB) + for (const Use &OI : I.operands()) { + if ((isa(OI) && !isa(OI)) || isa(OI)) + EnumerateValue(OI); } - BasicBlocks.push_back(BB); - ValueMap[BB] = BasicBlocks.size(); + BasicBlocks.push_back(&BB); + ValueMap[&BB] = BasicBlocks.size(); } // Optimize the constant layout. @@ -761,18 +734,17 @@ void ValueEnumerator::incorporateFunction(const Function &F) { SmallVector FnLocalMDVector; // Add all of the instructions. - for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { - for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) { - for (User::const_op_iterator OI = I->op_begin(), E = I->op_end(); - OI != E; ++OI) { - if (auto *MD = dyn_cast(&*OI)) + for (const BasicBlock &BB : F) { + for (const Instruction &I : BB) { + for (const Use &OI : I.operands()) { + if (auto *MD = dyn_cast(&OI)) if (auto *Local = dyn_cast(MD->getMetadata())) // Enumerate metadata after the instructions they might refer to. FnLocalMDVector.push_back(Local); } - if (!I->getType()->isVoidTy()) - EnumerateValue(I); + if (!I.getType()->isVoidTy()) + EnumerateValue(&I); } } @@ -786,7 +758,7 @@ void ValueEnumerator::purgeFunction() { for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i) ValueMap.erase(Values[i].first); for (unsigned i = NumModuleMDs, e = MDs.size(); i != e; ++i) - MDValueMap.erase(MDs[i]); + MetadataMap.erase(MDs[i]); for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i) ValueMap.erase(BasicBlocks[i]); @@ -799,8 +771,8 @@ void ValueEnumerator::purgeFunction() { static void IncorporateFunctionInfoGlobalBBIDs(const Function *F, DenseMap &IDMap) { unsigned Counter = 0; - for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB) - IDMap[BB] = ++Counter; + for (const BasicBlock &BB : *F) + IDMap[&BB] = ++Counter; } /// getGlobalBasicBlockID - This returns the function-specific ID for the