67634f1ac6c50f23c865967d5288c49731679cb6
[oota-llvm.git] / lib / Bitcode / Writer / ValueEnumerator.cpp
1 //===-- ValueEnumerator.cpp - Number values and types for bitcode writer --===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the ValueEnumerator class.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "ValueEnumerator.h"
15 #include "llvm/ADT/STLExtras.h"
16 #include "llvm/ADT/SmallPtrSet.h"
17 #include "llvm/IR/Constants.h"
18 #include "llvm/IR/DerivedTypes.h"
19 #include "llvm/IR/Instructions.h"
20 #include "llvm/IR/Module.h"
21 #include "llvm/IR/UseListOrder.h"
22 #include "llvm/IR/ValueSymbolTable.h"
23 #include "llvm/Support/Debug.h"
24 #include "llvm/Support/raw_ostream.h"
25 #include <algorithm>
26 using namespace llvm;
27
28 namespace {
29 typedef DenseMap<const Value *, std::pair<unsigned, bool>> OrderMap;
30 }
31
32 static void orderValue(const Value *V, OrderMap &OM) {
33   if (OM.lookup(V).first)
34     return;
35
36   if (const Constant *C = dyn_cast<Constant>(V))
37     if (C->getNumOperands() && !isa<GlobalValue>(C))
38       for (const Value *Op : C->operands())
39         if (!isa<BasicBlock>(Op))
40           orderValue(Op, OM);
41
42   // Note: we cannot cache this lookup above, since inserting into the map
43   // changes the map's size, and thus affects the ID.
44   OM[V].first = OM.size() + 1;
45 }
46
47 static OrderMap orderModule(const Module *M) {
48   // This needs to match the order used by ValueEnumerator::ValueEnumerator()
49   // and ValueEnumerator::incorporateFunction().
50   OrderMap OM;
51
52   for (const GlobalVariable &G : M->globals())
53     orderValue(&G, OM);
54   for (const Function &F : *M)
55     orderValue(&F, OM);
56   for (const GlobalAlias &A : M->aliases())
57     orderValue(&A, OM);
58   for (const GlobalVariable &G : M->globals())
59     if (G.hasInitializer())
60       orderValue(G.getInitializer(), OM);
61   for (const GlobalAlias &A : M->aliases())
62     orderValue(A.getAliasee(), OM);
63   for (const Function &F : *M)
64     if (F.hasPrefixData())
65       orderValue(F.getPrefixData(), OM);
66
67   for (const Function &F : *M) {
68     if (F.isDeclaration())
69       continue;
70     // Here we need to match the union of ValueEnumerator::incorporateFunction()
71     // and WriteFunction().  Basic blocks are implicitly declared before
72     // anything else (by declaring their size).
73     for (const BasicBlock &BB : F)
74       orderValue(&BB, OM);
75     for (const Argument &A : F.args())
76       orderValue(&A, OM);
77     for (const BasicBlock &BB : F)
78       for (const Instruction &I : BB)
79         for (const Value *Op : I.operands())
80           if ((isa<Constant>(*Op) && !isa<GlobalValue>(*Op)) ||
81               isa<InlineAsm>(*Op))
82             orderValue(Op, OM);
83     for (const BasicBlock &BB : F)
84       for (const Instruction &I : BB)
85         orderValue(&I, OM);
86   }
87   return OM;
88 }
89
90 static void predictValueUseListOrderImpl(const Value *V, const Function *F,
91                                          unsigned ID, const OrderMap &OM,
92                                          UseListOrderStack &Stack) {
93   // Predict use-list order for this one.
94   typedef std::pair<const Use *, unsigned> Entry;
95   SmallVector<Entry, 64> List;
96   for (const Use &U : V->uses())
97     // Check if this user will be serialized.
98     if (OM.lookup(U.getUser()).first)
99       List.push_back(std::make_pair(&U, List.size()));
100
101   if (List.size() < 2)
102     // We may have lost some users.
103     return;
104
105   std::sort(List.begin(), List.end(),
106             [&OM, ID](const Entry &L, const Entry &R) {
107     const Use *LU = L.first;
108     const Use *RU = R.first;
109     if (LU == RU)
110       return false;
111
112     auto LID = OM.lookup(LU->getUser()).first;
113     auto RID = OM.lookup(RU->getUser()).first;
114     // If ID is 4, then expect: 7 6 5 1 2 3.
115     if (LID < RID) {
116       if (RID < ID)
117         return true;
118       return false;
119     }
120     if (RID < LID) {
121       if (LID < ID)
122         return false;
123       return true;
124     }
125     // LID and RID are equal, so we have different operands of the same user.
126     // Assume operands are added in order for all instructions.
127     if (LU->getOperandNo() < RU->getOperandNo())
128       return LID < ID;
129     return ID < LID;
130   });
131
132   if (std::is_sorted(
133           List.begin(), List.end(),
134           [](const Entry &L, const Entry &R) { return L.second < R.second; }))
135     // Order is already correct.
136     return;
137
138   // Store the shuffle.
139   Stack.emplace_back(V, F, List.size());
140   assert(List.size() == Stack.back().Shuffle.size() && "Wrong size");
141   for (size_t I = 0, E = List.size(); I != E; ++I)
142     Stack.back().Shuffle[I] = List[I].second;
143 }
144
145 static void predictValueUseListOrder(const Value *V, const Function *F,
146                                      OrderMap &OM, UseListOrderStack &Stack) {
147   auto &IDPair = OM[V];
148   assert(IDPair.first && "Unmapped value");
149   if (IDPair.second)
150     // Already predicted.
151     return;
152
153   // Do the actual prediction.
154   IDPair.second = true;
155   if (!V->use_empty() && std::next(V->use_begin()) != V->use_end())
156     predictValueUseListOrderImpl(V, F, IDPair.first, OM, Stack);
157
158   // Recursive descent into constants.
159   if (const Constant *C = dyn_cast<Constant>(V))
160     if (C->getNumOperands() && !isa<GlobalValue>(C))
161       for (const Value *Op : C->operands())
162         if (isa<Constant>(Op) && !isa<GlobalValue>(Op))
163           predictValueUseListOrder(Op, F, OM, Stack);
164 }
165
166 static UseListOrderStack predictUseListOrder(const Module *M) {
167   OrderMap OM = orderModule(M);
168
169   // Use-list orders need to be serialized after all the users have been added
170   // to a value, or else the shuffles will be incomplete.  Store them per
171   // function in a stack.
172   //
173   // Aside from function order, the order of values doesn't matter much here.
174   UseListOrderStack Stack;
175
176   // We want to visit the functions backward now so we can list function-local
177   // constants in the last Function they're used in.  Module-level constants
178   // have already been visited above.
179   for (auto I = M->rbegin(), E = M->rend(); I != E; ++I) {
180     const Function &F = *I;
181     if (F.isDeclaration())
182       continue;
183     for (const BasicBlock &BB : F)
184       predictValueUseListOrder(&BB, &F, OM, Stack);
185     for (const Argument &A : F.args())
186       predictValueUseListOrder(&A, &F, OM, Stack);
187     for (const BasicBlock &BB : F)
188       for (const Instruction &I : BB)
189         for (const Value *Op : I.operands())
190           if ((isa<Constant>(*Op) && !isa<GlobalValue>(*Op)) ||
191               isa<InlineAsm>(*Op))
192             predictValueUseListOrder(Op, &F, OM, Stack);
193     for (const BasicBlock &BB : F)
194       for (const Instruction &I : BB)
195         predictValueUseListOrder(&I, &F, OM, Stack);
196   }
197
198   // Visit globals last, since the module-level use-list block will be seen
199   // before the function bodies are processed.
200   for (const GlobalVariable &G : M->globals())
201     predictValueUseListOrder(&G, nullptr, OM, Stack);
202   for (const Function &F : *M)
203     predictValueUseListOrder(&F, nullptr, OM, Stack);
204   for (const GlobalAlias &A : M->aliases())
205     predictValueUseListOrder(&A, nullptr, OM, Stack);
206   for (const GlobalVariable &G : M->globals())
207     if (G.hasInitializer())
208       predictValueUseListOrder(G.getInitializer(), nullptr, OM, Stack);
209   for (const GlobalAlias &A : M->aliases())
210     predictValueUseListOrder(A.getAliasee(), nullptr, OM, Stack);
211   for (const Function &F : *M)
212     if (F.hasPrefixData())
213       predictValueUseListOrder(F.getPrefixData(), nullptr, OM, Stack);
214
215   return Stack;
216 }
217
218 static bool isIntOrIntVectorValue(const std::pair<const Value*, unsigned> &V) {
219   return V.first->getType()->isIntOrIntVectorTy();
220 }
221
222 /// ValueEnumerator - Enumerate module-level information.
223 ValueEnumerator::ValueEnumerator(const Module *M) {
224   if (shouldPreserveBitcodeUseListOrder())
225     UseListOrders = predictUseListOrder(M);
226
227   // Enumerate the global variables.
228   for (Module::const_global_iterator I = M->global_begin(),
229
230          E = M->global_end(); I != E; ++I)
231     EnumerateValue(I);
232
233   // Enumerate the functions.
234   for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) {
235     EnumerateValue(I);
236     EnumerateAttributes(cast<Function>(I)->getAttributes());
237   }
238
239   // Enumerate the aliases.
240   for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
241        I != E; ++I)
242     EnumerateValue(I);
243
244   // Remember what is the cutoff between globalvalue's and other constants.
245   unsigned FirstConstant = Values.size();
246
247   // Enumerate the global variable initializers.
248   for (Module::const_global_iterator I = M->global_begin(),
249          E = M->global_end(); I != E; ++I)
250     if (I->hasInitializer())
251       EnumerateValue(I->getInitializer());
252
253   // Enumerate the aliasees.
254   for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
255        I != E; ++I)
256     EnumerateValue(I->getAliasee());
257
258   // Enumerate the prefix data constants.
259   for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
260     if (I->hasPrefixData())
261       EnumerateValue(I->getPrefixData());
262
263   // Insert constants and metadata that are named at module level into the slot
264   // pool so that the module symbol table can refer to them...
265   EnumerateValueSymbolTable(M->getValueSymbolTable());
266   EnumerateNamedMetadata(M);
267
268   SmallVector<std::pair<unsigned, MDNode*>, 8> MDs;
269
270   // Enumerate types used by function bodies and argument lists.
271   for (const Function &F : *M) {
272     for (const Argument &A : F.args())
273       EnumerateType(A.getType());
274
275     for (const BasicBlock &BB : F)
276       for (const Instruction &I : BB) {
277         for (const Use &Op : I.operands()) {
278           if (MDNode *MD = dyn_cast<MDNode>(&Op))
279             if (MD->isFunctionLocal() && MD->getFunction())
280               // These will get enumerated during function-incorporation.
281               continue;
282           EnumerateOperandType(Op);
283         }
284         EnumerateType(I.getType());
285         if (const CallInst *CI = dyn_cast<CallInst>(&I))
286           EnumerateAttributes(CI->getAttributes());
287         else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I))
288           EnumerateAttributes(II->getAttributes());
289
290         // Enumerate metadata attached with this instruction.
291         MDs.clear();
292         I.getAllMetadataOtherThanDebugLoc(MDs);
293         for (unsigned i = 0, e = MDs.size(); i != e; ++i)
294           EnumerateMetadata(MDs[i].second);
295
296         if (!I.getDebugLoc().isUnknown()) {
297           MDNode *Scope, *IA;
298           I.getDebugLoc().getScopeAndInlinedAt(Scope, IA, I.getContext());
299           if (Scope) EnumerateMetadata(Scope);
300           if (IA) EnumerateMetadata(IA);
301         }
302       }
303   }
304
305   // Optimize constant ordering.
306   OptimizeConstants(FirstConstant, Values.size());
307 }
308
309 unsigned ValueEnumerator::getInstructionID(const Instruction *Inst) const {
310   InstructionMapType::const_iterator I = InstructionMap.find(Inst);
311   assert(I != InstructionMap.end() && "Instruction is not mapped!");
312   return I->second;
313 }
314
315 unsigned ValueEnumerator::getComdatID(const Comdat *C) const {
316   unsigned ComdatID = Comdats.idFor(C);
317   assert(ComdatID && "Comdat not found!");
318   return ComdatID;
319 }
320
321 void ValueEnumerator::setInstructionID(const Instruction *I) {
322   InstructionMap[I] = InstructionCount++;
323 }
324
325 unsigned ValueEnumerator::getValueID(const Value *V) const {
326   if (isa<MDNode>(V) || isa<MDString>(V)) {
327     ValueMapType::const_iterator I = MDValueMap.find(V);
328     assert(I != MDValueMap.end() && "Value not in slotcalculator!");
329     return I->second-1;
330   }
331
332   ValueMapType::const_iterator I = ValueMap.find(V);
333   assert(I != ValueMap.end() && "Value not in slotcalculator!");
334   return I->second-1;
335 }
336
337 void ValueEnumerator::dump() const {
338   print(dbgs(), ValueMap, "Default");
339   dbgs() << '\n';
340   print(dbgs(), MDValueMap, "MetaData");
341   dbgs() << '\n';
342 }
343
344 void ValueEnumerator::print(raw_ostream &OS, const ValueMapType &Map,
345                             const char *Name) const {
346
347   OS << "Map Name: " << Name << "\n";
348   OS << "Size: " << Map.size() << "\n";
349   for (ValueMapType::const_iterator I = Map.begin(),
350          E = Map.end(); I != E; ++I) {
351
352     const Value *V = I->first;
353     if (V->hasName())
354       OS << "Value: " << V->getName();
355     else
356       OS << "Value: [null]\n";
357     V->dump();
358
359     OS << " Uses(" << std::distance(V->use_begin(),V->use_end()) << "):";
360     for (const Use &U : V->uses()) {
361       if (&U != &*V->use_begin())
362         OS << ",";
363       if(U->hasName())
364         OS << " " << U->getName();
365       else
366         OS << " [null]";
367
368     }
369     OS <<  "\n\n";
370   }
371 }
372
373 /// OptimizeConstants - Reorder constant pool for denser encoding.
374 void ValueEnumerator::OptimizeConstants(unsigned CstStart, unsigned CstEnd) {
375   if (CstStart == CstEnd || CstStart+1 == CstEnd) return;
376
377   if (shouldPreserveBitcodeUseListOrder())
378     // Optimizing constants makes the use-list order difficult to predict.
379     // Disable it for now when trying to preserve the order.
380     return;
381
382   std::stable_sort(Values.begin() + CstStart, Values.begin() + CstEnd,
383                    [this](const std::pair<const Value *, unsigned> &LHS,
384                           const std::pair<const Value *, unsigned> &RHS) {
385     // Sort by plane.
386     if (LHS.first->getType() != RHS.first->getType())
387       return getTypeID(LHS.first->getType()) < getTypeID(RHS.first->getType());
388     // Then by frequency.
389     return LHS.second > RHS.second;
390   });
391
392   // Ensure that integer and vector of integer constants are at the start of the
393   // constant pool.  This is important so that GEP structure indices come before
394   // gep constant exprs.
395   std::partition(Values.begin()+CstStart, Values.begin()+CstEnd,
396                  isIntOrIntVectorValue);
397
398   // Rebuild the modified portion of ValueMap.
399   for (; CstStart != CstEnd; ++CstStart)
400     ValueMap[Values[CstStart].first] = CstStart+1;
401 }
402
403
404 /// EnumerateValueSymbolTable - Insert all of the values in the specified symbol
405 /// table into the values table.
406 void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) {
407   for (ValueSymbolTable::const_iterator VI = VST.begin(), VE = VST.end();
408        VI != VE; ++VI)
409     EnumerateValue(VI->getValue());
410 }
411
412 /// EnumerateNamedMetadata - Insert all of the values referenced by
413 /// named metadata in the specified module.
414 void ValueEnumerator::EnumerateNamedMetadata(const Module *M) {
415   for (Module::const_named_metadata_iterator I = M->named_metadata_begin(),
416        E = M->named_metadata_end(); I != E; ++I)
417     EnumerateNamedMDNode(I);
418 }
419
420 void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) {
421   for (unsigned i = 0, e = MD->getNumOperands(); i != e; ++i)
422     EnumerateMetadata(MD->getOperand(i));
423 }
424
425 /// EnumerateMDNodeOperands - Enumerate all non-function-local values
426 /// and types referenced by the given MDNode.
427 void ValueEnumerator::EnumerateMDNodeOperands(const MDNode *N) {
428   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
429     if (Value *V = N->getOperand(i)) {
430       if (isa<MDNode>(V) || isa<MDString>(V))
431         EnumerateMetadata(V);
432       else if (!isa<Instruction>(V) && !isa<Argument>(V))
433         EnumerateValue(V);
434     } else
435       EnumerateType(Type::getVoidTy(N->getContext()));
436   }
437 }
438
439 void ValueEnumerator::EnumerateMetadata(const Value *MD) {
440   assert((isa<MDNode>(MD) || isa<MDString>(MD)) && "Invalid metadata kind");
441
442   // Enumerate the type of this value.
443   EnumerateType(MD->getType());
444
445   const MDNode *N = dyn_cast<MDNode>(MD);
446
447   // In the module-level pass, skip function-local nodes themselves, but
448   // do walk their operands.
449   if (N && N->isFunctionLocal() && N->getFunction()) {
450     EnumerateMDNodeOperands(N);
451     return;
452   }
453
454   // Check to see if it's already in!
455   unsigned &MDValueID = MDValueMap[MD];
456   if (MDValueID) {
457     // Increment use count.
458     MDValues[MDValueID-1].second++;
459     return;
460   }
461   MDValues.push_back(std::make_pair(MD, 1U));
462   MDValueID = MDValues.size();
463
464   // Enumerate all non-function-local operands.
465   if (N)
466     EnumerateMDNodeOperands(N);
467 }
468
469 /// EnumerateFunctionLocalMetadataa - Incorporate function-local metadata
470 /// information reachable from the given MDNode.
471 void ValueEnumerator::EnumerateFunctionLocalMetadata(const MDNode *N) {
472   assert(N->isFunctionLocal() && N->getFunction() &&
473          "EnumerateFunctionLocalMetadata called on non-function-local mdnode!");
474
475   // Enumerate the type of this value.
476   EnumerateType(N->getType());
477
478   // Check to see if it's already in!
479   unsigned &MDValueID = MDValueMap[N];
480   if (MDValueID) {
481     // Increment use count.
482     MDValues[MDValueID-1].second++;
483     return;
484   }
485   MDValues.push_back(std::make_pair(N, 1U));
486   MDValueID = MDValues.size();
487
488   // To incoroporate function-local information visit all function-local
489   // MDNodes and all function-local values they reference.
490   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
491     if (Value *V = N->getOperand(i)) {
492       if (MDNode *O = dyn_cast<MDNode>(V)) {
493         if (O->isFunctionLocal() && O->getFunction())
494           EnumerateFunctionLocalMetadata(O);
495       } else if (isa<Instruction>(V) || isa<Argument>(V))
496         EnumerateValue(V);
497     }
498
499   // Also, collect all function-local MDNodes for easy access.
500   FunctionLocalMDs.push_back(N);
501 }
502
503 void ValueEnumerator::EnumerateValue(const Value *V) {
504   assert(!V->getType()->isVoidTy() && "Can't insert void values!");
505   assert(!isa<MDNode>(V) && !isa<MDString>(V) &&
506          "EnumerateValue doesn't handle Metadata!");
507
508   // Check to see if it's already in!
509   unsigned &ValueID = ValueMap[V];
510   if (ValueID) {
511     // Increment use count.
512     Values[ValueID-1].second++;
513     return;
514   }
515
516   if (auto *GO = dyn_cast<GlobalObject>(V))
517     if (const Comdat *C = GO->getComdat())
518       Comdats.insert(C);
519
520   // Enumerate the type of this value.
521   EnumerateType(V->getType());
522
523   if (const Constant *C = dyn_cast<Constant>(V)) {
524     if (isa<GlobalValue>(C)) {
525       // Initializers for globals are handled explicitly elsewhere.
526     } else if (C->getNumOperands()) {
527       // If a constant has operands, enumerate them.  This makes sure that if a
528       // constant has uses (for example an array of const ints), that they are
529       // inserted also.
530
531       // We prefer to enumerate them with values before we enumerate the user
532       // itself.  This makes it more likely that we can avoid forward references
533       // in the reader.  We know that there can be no cycles in the constants
534       // graph that don't go through a global variable.
535       for (User::const_op_iterator I = C->op_begin(), E = C->op_end();
536            I != E; ++I)
537         if (!isa<BasicBlock>(*I)) // Don't enumerate BB operand to BlockAddress.
538           EnumerateValue(*I);
539
540       // Finally, add the value.  Doing this could make the ValueID reference be
541       // dangling, don't reuse it.
542       Values.push_back(std::make_pair(V, 1U));
543       ValueMap[V] = Values.size();
544       return;
545     }
546   }
547
548   // Add the value.
549   Values.push_back(std::make_pair(V, 1U));
550   ValueID = Values.size();
551 }
552
553
554 void ValueEnumerator::EnumerateType(Type *Ty) {
555   unsigned *TypeID = &TypeMap[Ty];
556
557   // We've already seen this type.
558   if (*TypeID)
559     return;
560
561   // If it is a non-anonymous struct, mark the type as being visited so that we
562   // don't recursively visit it.  This is safe because we allow forward
563   // references of these in the bitcode reader.
564   if (StructType *STy = dyn_cast<StructType>(Ty))
565     if (!STy->isLiteral())
566       *TypeID = ~0U;
567
568   // Enumerate all of the subtypes before we enumerate this type.  This ensures
569   // that the type will be enumerated in an order that can be directly built.
570   for (Type::subtype_iterator I = Ty->subtype_begin(), E = Ty->subtype_end();
571        I != E; ++I)
572     EnumerateType(*I);
573
574   // Refresh the TypeID pointer in case the table rehashed.
575   TypeID = &TypeMap[Ty];
576
577   // Check to see if we got the pointer another way.  This can happen when
578   // enumerating recursive types that hit the base case deeper than they start.
579   //
580   // If this is actually a struct that we are treating as forward ref'able,
581   // then emit the definition now that all of its contents are available.
582   if (*TypeID && *TypeID != ~0U)
583     return;
584
585   // Add this type now that its contents are all happily enumerated.
586   Types.push_back(Ty);
587
588   *TypeID = Types.size();
589 }
590
591 // Enumerate the types for the specified value.  If the value is a constant,
592 // walk through it, enumerating the types of the constant.
593 void ValueEnumerator::EnumerateOperandType(const Value *V) {
594   EnumerateType(V->getType());
595
596   if (const Constant *C = dyn_cast<Constant>(V)) {
597     // If this constant is already enumerated, ignore it, we know its type must
598     // be enumerated.
599     if (ValueMap.count(V)) return;
600
601     // This constant may have operands, make sure to enumerate the types in
602     // them.
603     for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
604       const Value *Op = C->getOperand(i);
605
606       // Don't enumerate basic blocks here, this happens as operands to
607       // blockaddress.
608       if (isa<BasicBlock>(Op)) continue;
609
610       EnumerateOperandType(Op);
611     }
612
613     if (const MDNode *N = dyn_cast<MDNode>(V)) {
614       for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
615         if (Value *Elem = N->getOperand(i))
616           EnumerateOperandType(Elem);
617     }
618   } else if (isa<MDString>(V) || isa<MDNode>(V))
619     EnumerateMetadata(V);
620 }
621
622 void ValueEnumerator::EnumerateAttributes(AttributeSet PAL) {
623   if (PAL.isEmpty()) return;  // null is always 0.
624
625   // Do a lookup.
626   unsigned &Entry = AttributeMap[PAL];
627   if (Entry == 0) {
628     // Never saw this before, add it.
629     Attribute.push_back(PAL);
630     Entry = Attribute.size();
631   }
632
633   // Do lookups for all attribute groups.
634   for (unsigned i = 0, e = PAL.getNumSlots(); i != e; ++i) {
635     AttributeSet AS = PAL.getSlotAttributes(i);
636     unsigned &Entry = AttributeGroupMap[AS];
637     if (Entry == 0) {
638       AttributeGroups.push_back(AS);
639       Entry = AttributeGroups.size();
640     }
641   }
642 }
643
644 void ValueEnumerator::incorporateFunction(const Function &F) {
645   InstructionCount = 0;
646   NumModuleValues = Values.size();
647   NumModuleMDValues = MDValues.size();
648
649   // Adding function arguments to the value table.
650   for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
651        I != E; ++I)
652     EnumerateValue(I);
653
654   FirstFuncConstantID = Values.size();
655
656   // Add all function-level constants to the value table.
657   for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
658     for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I)
659       for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
660            OI != E; ++OI) {
661         if ((isa<Constant>(*OI) && !isa<GlobalValue>(*OI)) ||
662             isa<InlineAsm>(*OI))
663           EnumerateValue(*OI);
664       }
665     BasicBlocks.push_back(BB);
666     ValueMap[BB] = BasicBlocks.size();
667   }
668
669   // Optimize the constant layout.
670   OptimizeConstants(FirstFuncConstantID, Values.size());
671
672   // Add the function's parameter attributes so they are available for use in
673   // the function's instruction.
674   EnumerateAttributes(F.getAttributes());
675
676   FirstInstID = Values.size();
677
678   SmallVector<MDNode *, 8> FnLocalMDVector;
679   // Add all of the instructions.
680   for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
681     for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) {
682       for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
683            OI != E; ++OI) {
684         if (MDNode *MD = dyn_cast<MDNode>(*OI))
685           if (MD->isFunctionLocal() && MD->getFunction())
686             // Enumerate metadata after the instructions they might refer to.
687             FnLocalMDVector.push_back(MD);
688       }
689
690       SmallVector<std::pair<unsigned, MDNode*>, 8> MDs;
691       I->getAllMetadataOtherThanDebugLoc(MDs);
692       for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
693         MDNode *N = MDs[i].second;
694         if (N->isFunctionLocal() && N->getFunction())
695           FnLocalMDVector.push_back(N);
696       }
697
698       if (!I->getType()->isVoidTy())
699         EnumerateValue(I);
700     }
701   }
702
703   // Add all of the function-local metadata.
704   for (unsigned i = 0, e = FnLocalMDVector.size(); i != e; ++i)
705     EnumerateFunctionLocalMetadata(FnLocalMDVector[i]);
706 }
707
708 void ValueEnumerator::purgeFunction() {
709   /// Remove purged values from the ValueMap.
710   for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i)
711     ValueMap.erase(Values[i].first);
712   for (unsigned i = NumModuleMDValues, e = MDValues.size(); i != e; ++i)
713     MDValueMap.erase(MDValues[i].first);
714   for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i)
715     ValueMap.erase(BasicBlocks[i]);
716
717   Values.resize(NumModuleValues);
718   MDValues.resize(NumModuleMDValues);
719   BasicBlocks.clear();
720   FunctionLocalMDs.clear();
721 }
722
723 static void IncorporateFunctionInfoGlobalBBIDs(const Function *F,
724                                  DenseMap<const BasicBlock*, unsigned> &IDMap) {
725   unsigned Counter = 0;
726   for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
727     IDMap[BB] = ++Counter;
728 }
729
730 /// getGlobalBasicBlockID - This returns the function-specific ID for the
731 /// specified basic block.  This is relatively expensive information, so it
732 /// should only be used by rare constructs such as address-of-label.
733 unsigned ValueEnumerator::getGlobalBasicBlockID(const BasicBlock *BB) const {
734   unsigned &Idx = GlobalBasicBlockIDs[BB];
735   if (Idx != 0)
736     return Idx-1;
737
738   IncorporateFunctionInfoGlobalBBIDs(BB->getParent(), GlobalBasicBlockIDs);
739   return getGlobalBasicBlockID(BB);
740 }
741