blob: 67634f1ac6c50f23c865967d5288c49731679cb6 [file] [log] [blame]
Chris Lattnerc1d10d62007-04-22 06:24:45 +00001//===-- ValueEnumerator.cpp - Number values and types for bitcode writer --===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattnerc1d10d62007-04-22 06:24:45 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the ValueEnumerator class.
11//
12//===----------------------------------------------------------------------===//
13
14#include "ValueEnumerator.h"
Rafael Espindola337a1b22011-04-06 16:49:37 +000015#include "llvm/ADT/STLExtras.h"
Chandler Carruthed0881b2012-12-03 16:50:05 +000016#include "llvm/ADT/SmallPtrSet.h"
Chandler Carruth9fb823b2013-01-02 11:36:10 +000017#include "llvm/IR/Constants.h"
18#include "llvm/IR/DerivedTypes.h"
19#include "llvm/IR/Instructions.h"
20#include "llvm/IR/Module.h"
Duncan P. N. Exon Smith15eb0ab2014-07-25 16:13:16 +000021#include "llvm/IR/UseListOrder.h"
Chandler Carruth9fb823b2013-01-02 11:36:10 +000022#include "llvm/IR/ValueSymbolTable.h"
Chad Rosier78037a92011-12-07 20:44:46 +000023#include "llvm/Support/Debug.h"
24#include "llvm/Support/raw_ostream.h"
Chris Lattnera8713be2007-05-04 05:05:48 +000025#include <algorithm>
Chris Lattnerc1d10d62007-04-22 06:24:45 +000026using namespace llvm;
27
Duncan P. N. Exon Smith1f66c852014-07-28 21:19:41 +000028namespace {
29typedef DenseMap<const Value *, std::pair<unsigned, bool>> OrderMap;
30}
31
32static 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
47static 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
90static 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;
Duncan P. N. Exon Smith3f0fc7b2014-07-29 01:13:56 +0000109 if (LU == RU)
110 return false;
111
Duncan P. N. Exon Smith1f66c852014-07-28 21:19:41 +0000112 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.
Duncan P. N. Exon Smithd7a281a2014-07-29 16:58:18 +0000139 Stack.emplace_back(V, F, List.size());
140 assert(List.size() == Stack.back().Shuffle.size() && "Wrong size");
Duncan P. N. Exon Smithf849ace2014-07-28 22:41:50 +0000141 for (size_t I = 0, E = List.size(); I != E; ++I)
Duncan P. N. Exon Smithd7a281a2014-07-29 16:58:18 +0000142 Stack.back().Shuffle[I] = List[I].second;
Duncan P. N. Exon Smith1f66c852014-07-28 21:19:41 +0000143}
144
145static 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
166static 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
Duncan Sandse6beec62012-11-13 12:59:33 +0000218static bool isIntOrIntVectorValue(const std::pair<const Value*, unsigned> &V) {
219 return V.first->getType()->isIntOrIntVectorTy();
Chris Lattner430e80d2007-05-04 05:21:47 +0000220}
221
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000222/// ValueEnumerator - Enumerate module-level information.
223ValueEnumerator::ValueEnumerator(const Module *M) {
Duncan P. N. Exon Smith1f66c852014-07-28 21:19:41 +0000224 if (shouldPreserveBitcodeUseListOrder())
225 UseListOrders = predictUseListOrder(M);
226
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000227 // Enumerate the global variables.
228 for (Module::const_global_iterator I = M->global_begin(),
Duncan P. N. Exon Smith1f66c852014-07-28 21:19:41 +0000229
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000230 E = M->global_end(); I != E; ++I)
231 EnumerateValue(I);
232
233 // Enumerate the functions.
Duncan Sandsad0ea2d2007-11-27 13:23:08 +0000234 for (Module::const_iterator I = M->begin(), E = M->end(); I != E; ++I) {
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000235 EnumerateValue(I);
Devang Patel4c758ea2008-09-25 21:00:45 +0000236 EnumerateAttributes(cast<Function>(I)->getAttributes());
Duncan Sandsad0ea2d2007-11-27 13:23:08 +0000237 }
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000238
Chris Lattner44c17072007-04-26 02:46:40 +0000239 // Enumerate the aliases.
240 for (Module::const_alias_iterator I = M->alias_begin(), E = M->alias_end();
241 I != E; ++I)
242 EnumerateValue(I);
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000243
Chris Lattner430e80d2007-05-04 05:21:47 +0000244 // Remember what is the cutoff between globalvalue's and other constants.
245 unsigned FirstConstant = Values.size();
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000246
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000247 // 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
Chris Lattner44c17072007-04-26 02:46:40 +0000253 // 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());
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000257
Peter Collingbourne3fa50f92013-09-16 01:08:15 +0000258 // 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
Joe Abbeybc6f4ba2013-04-01 02:28:07 +0000263 // Insert constants and metadata that are named at module level into the slot
Devang Patelfcfee0f2010-01-07 19:39:36 +0000264 // pool so that the module symbol table can refer to them...
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000265 EnumerateValueSymbolTable(M->getValueSymbolTable());
Dan Gohman2637cc12010-07-21 23:38:33 +0000266 EnumerateNamedMetadata(M);
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000267
Chris Lattner8dace892009-12-31 00:51:46 +0000268 SmallVector<std::pair<unsigned, MDNode*>, 8> MDs;
269
Chris Lattner5f640b92007-04-26 03:50:57 +0000270 // Enumerate types used by function bodies and argument lists.
Rafael Espindola087d6272014-06-17 03:00:40 +0000271 for (const Function &F : *M) {
272 for (const Argument &A : F.args())
273 EnumerateType(A.getType());
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000274
Rafael Espindola087d6272014-06-17 03:00:40 +0000275 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))
Victor Hernandez1b081382010-02-06 01:21:09 +0000279 if (MD->isFunctionLocal() && MD->getFunction())
Victor Hernandez572218b2010-01-14 19:54:11 +0000280 // These will get enumerated during function-incorporation.
281 continue;
Rafael Espindola087d6272014-06-17 03:00:40 +0000282 EnumerateOperandType(Op);
Victor Hernandez572218b2010-01-14 19:54:11 +0000283 }
Rafael Espindola087d6272014-06-17 03:00:40 +0000284 EnumerateType(I.getType());
285 if (const CallInst *CI = dyn_cast<CallInst>(&I))
Devang Patel4c758ea2008-09-25 21:00:45 +0000286 EnumerateAttributes(CI->getAttributes());
Rafael Espindola087d6272014-06-17 03:00:40 +0000287 else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I))
Devang Patel4c758ea2008-09-25 21:00:45 +0000288 EnumerateAttributes(II->getAttributes());
Devang Patelaf206b82009-09-18 19:26:43 +0000289
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000290 // Enumerate metadata attached with this instruction.
Devang Patel6da5dbf2009-10-22 18:55:16 +0000291 MDs.clear();
Rafael Espindola087d6272014-06-17 03:00:40 +0000292 I.getAllMetadataOtherThanDebugLoc(MDs);
Chris Lattner2f2aa2b2009-12-28 23:41:32 +0000293 for (unsigned i = 0, e = MDs.size(); i != e; ++i)
Victor Hernandez572218b2010-01-14 19:54:11 +0000294 EnumerateMetadata(MDs[i].second);
Joe Abbey2ad8df22012-11-25 15:23:39 +0000295
Rafael Espindola087d6272014-06-17 03:00:40 +0000296 if (!I.getDebugLoc().isUnknown()) {
Chris Lattner07d09ed2010-04-03 02:17:50 +0000297 MDNode *Scope, *IA;
Rafael Espindola087d6272014-06-17 03:00:40 +0000298 I.getDebugLoc().getScopeAndInlinedAt(Scope, IA, I.getContext());
Chris Lattner07d09ed2010-04-03 02:17:50 +0000299 if (Scope) EnumerateMetadata(Scope);
300 if (IA) EnumerateMetadata(IA);
301 }
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000302 }
303 }
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000304
Chris Lattner430e80d2007-05-04 05:21:47 +0000305 // Optimize constant ordering.
306 OptimizeConstants(FirstConstant, Values.size());
Rafael Espindola337a1b22011-04-06 16:49:37 +0000307}
308
Devang Patelaf206b82009-09-18 19:26:43 +0000309unsigned ValueEnumerator::getInstructionID(const Instruction *Inst) const {
310 InstructionMapType::const_iterator I = InstructionMap.find(Inst);
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000311 assert(I != InstructionMap.end() && "Instruction is not mapped!");
Dan Gohman1f4b0282010-08-25 17:09:50 +0000312 return I->second;
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000313}
Devang Patelaf206b82009-09-18 19:26:43 +0000314
David Majnemerdad0a642014-06-27 18:19:56 +0000315unsigned ValueEnumerator::getComdatID(const Comdat *C) const {
316 unsigned ComdatID = Comdats.idFor(C);
317 assert(ComdatID && "Comdat not found!");
318 return ComdatID;
319}
320
Devang Patelaf206b82009-09-18 19:26:43 +0000321void ValueEnumerator::setInstructionID(const Instruction *I) {
322 InstructionMap[I] = InstructionCount++;
323}
324
Devang Patel05eb6172009-08-04 06:00:18 +0000325unsigned ValueEnumerator::getValueID(const Value *V) const {
Devang Patelac277eb2010-01-22 22:52:10 +0000326 if (isa<MDNode>(V) || isa<MDString>(V)) {
Devang Patel05eb6172009-08-04 06:00:18 +0000327 ValueMapType::const_iterator I = MDValueMap.find(V);
328 assert(I != MDValueMap.end() && "Value not in slotcalculator!");
329 return I->second-1;
330 }
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000331
Devang Patel05eb6172009-08-04 06:00:18 +0000332 ValueMapType::const_iterator I = ValueMap.find(V);
333 assert(I != ValueMap.end() && "Value not in slotcalculator!");
334 return I->second-1;
335}
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000336
Chad Rosier78037a92011-12-07 20:44:46 +0000337void ValueEnumerator::dump() const {
338 print(dbgs(), ValueMap, "Default");
339 dbgs() << '\n';
340 print(dbgs(), MDValueMap, "MetaData");
341 dbgs() << '\n';
342}
343
344void 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()) << "):";
Chandler Carruthcdf47882014-03-09 03:16:01 +0000360 for (const Use &U : V->uses()) {
361 if (&U != &*V->use_begin())
Chad Rosier78037a92011-12-07 20:44:46 +0000362 OS << ",";
Chandler Carruthcdf47882014-03-09 03:16:01 +0000363 if(U->hasName())
364 OS << " " << U->getName();
Chad Rosier78037a92011-12-07 20:44:46 +0000365 else
366 OS << " [null]";
367
368 }
369 OS << "\n\n";
370 }
371}
372
Chris Lattner430e80d2007-05-04 05:21:47 +0000373/// OptimizeConstants - Reorder constant pool for denser encoding.
374void ValueEnumerator::OptimizeConstants(unsigned CstStart, unsigned CstEnd) {
375 if (CstStart == CstEnd || CstStart+1 == CstEnd) return;
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000376
Duncan P. N. Exon Smith15eb0ab2014-07-25 16:13:16 +0000377 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
Benjamin Kramer3a377bc2014-03-01 11:47:00 +0000382 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 });
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000391
Duncan Sandse6beec62012-11-13 12:59:33 +0000392 // 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.
Chris Lattner430e80d2007-05-04 05:21:47 +0000395 std::partition(Values.begin()+CstStart, Values.begin()+CstEnd,
Duncan Sandse6beec62012-11-13 12:59:33 +0000396 isIntOrIntVectorValue);
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000397
Chris Lattner430e80d2007-05-04 05:21:47 +0000398 // Rebuild the modified portion of ValueMap.
399 for (; CstStart != CstEnd; ++CstStart)
400 ValueMap[Values[CstStart].first] = CstStart+1;
401}
402
403
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000404/// EnumerateValueSymbolTable - Insert all of the values in the specified symbol
405/// table into the values table.
406void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) {
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000407 for (ValueSymbolTable::const_iterator VI = VST.begin(), VE = VST.end();
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000408 VI != VE; ++VI)
409 EnumerateValue(VI->getValue());
410}
411
Dan Gohman2637cc12010-07-21 23:38:33 +0000412/// EnumerateNamedMetadata - Insert all of the values referenced by
413/// named metadata in the specified module.
414void 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);
Devang Patelfcfee0f2010-01-07 19:39:36 +0000418}
419
Devang Patel99ff5a82010-01-09 00:30:14 +0000420void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) {
Devang Patel99ff5a82010-01-09 00:30:14 +0000421 for (unsigned i = 0, e = MD->getNumOperands(); i != e; ++i)
Dan Gohmand3d2bbe2010-08-24 02:01:24 +0000422 EnumerateMetadata(MD->getOperand(i));
Devang Patel99ff5a82010-01-09 00:30:14 +0000423}
424
Dan Gohmanc828c542010-08-24 02:24:03 +0000425/// EnumerateMDNodeOperands - Enumerate all non-function-local values
426/// and types referenced by the given MDNode.
427void 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
Devang Patelac277eb2010-01-22 22:52:10 +0000439void ValueEnumerator::EnumerateMetadata(const Value *MD) {
Benjamin Kramer14bb1142010-01-23 09:54:23 +0000440 assert((isa<MDNode>(MD) || isa<MDString>(MD)) && "Invalid metadata kind");
Dan Gohmanc828c542010-08-24 02:24:03 +0000441
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
Devang Patel05eb6172009-08-04 06:00:18 +0000454 // 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 }
Devang Patel05eb6172009-08-04 06:00:18 +0000461 MDValues.push_back(std::make_pair(MD, 1U));
462 MDValueID = MDValues.size();
Dan Gohmanc828c542010-08-24 02:24:03 +0000463
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.
471void 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)) {
Dan Gohman10215a12010-08-24 02:40:27 +0000492 if (MDNode *O = dyn_cast<MDNode>(V)) {
Dan Gohmanc828c542010-08-24 02:24:03 +0000493 if (O->isFunctionLocal() && O->getFunction())
494 EnumerateFunctionLocalMetadata(O);
Dan Gohman10215a12010-08-24 02:40:27 +0000495 } else if (isa<Instruction>(V) || isa<Argument>(V))
Dan Gohmanc828c542010-08-24 02:24:03 +0000496 EnumerateValue(V);
497 }
498
499 // Also, collect all function-local MDNodes for easy access.
500 FunctionLocalMDs.push_back(N);
Devang Patel05eb6172009-08-04 06:00:18 +0000501}
502
Victor Hernandez572218b2010-01-14 19:54:11 +0000503void ValueEnumerator::EnumerateValue(const Value *V) {
Chris Lattner8dace892009-12-31 00:51:46 +0000504 assert(!V->getType()->isVoidTy() && "Can't insert void values!");
Dan Gohmanc828c542010-08-24 02:24:03 +0000505 assert(!isa<MDNode>(V) && !isa<MDString>(V) &&
506 "EnumerateValue doesn't handle Metadata!");
Devang Patel05eb6172009-08-04 06:00:18 +0000507
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000508 // 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 }
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000515
David Majnemerdad0a642014-06-27 18:19:56 +0000516 if (auto *GO = dyn_cast<GlobalObject>(V))
517 if (const Comdat *C = GO->getComdat())
518 Comdats.insert(C);
519
Chris Lattner9ee48362007-05-06 01:00:28 +0000520 // Enumerate the type of this value.
521 EnumerateType(V->getType());
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000522
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000523 if (const Constant *C = dyn_cast<Constant>(V)) {
524 if (isa<GlobalValue>(C)) {
525 // Initializers for globals are handled explicitly elsewhere.
Chris Lattner9ee48362007-05-06 01:00:28 +0000526 } 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.
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000530
Chris Lattner9ee48362007-05-06 01:00:28 +0000531 // 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.
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000535 for (User::const_op_iterator I = C->op_begin(), E = C->op_end();
536 I != E; ++I)
Chris Lattneraa99c942009-11-01 01:27:45 +0000537 if (!isa<BasicBlock>(*I)) // Don't enumerate BB operand to BlockAddress.
Victor Hernandez572218b2010-01-14 19:54:11 +0000538 EnumerateValue(*I);
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000539
Chris Lattner9ee48362007-05-06 01:00:28 +0000540 // 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;
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000545 }
546 }
Devang Patele059ba6e2009-07-23 01:07:34 +0000547
Chris Lattner9ee48362007-05-06 01:00:28 +0000548 // Add the value.
549 Values.push_back(std::make_pair(V, 1U));
550 ValueID = Values.size();
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000551}
552
553
Chris Lattner229907c2011-07-18 04:54:35 +0000554void ValueEnumerator::EnumerateType(Type *Ty) {
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000555 unsigned *TypeID = &TypeMap[Ty];
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000556
Rafael Espindola337a1b22011-04-06 16:49:37 +0000557 // We've already seen this type.
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000558 if (*TypeID)
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000559 return;
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000560
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000561 // 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.
Chris Lattner229907c2011-07-18 04:54:35 +0000564 if (StructType *STy = dyn_cast<StructType>(Ty))
Chris Lattner335d3992011-08-12 18:06:37 +0000565 if (!STy->isLiteral())
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000566 *TypeID = ~0U;
Joe Abbey2ad8df22012-11-25 15:23:39 +0000567
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000568 // 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.
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000570 for (Type::subtype_iterator I = Ty->subtype_begin(), E = Ty->subtype_end();
571 I != E; ++I)
572 EnumerateType(*I);
Joe Abbey2ad8df22012-11-25 15:23:39 +0000573
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000574 // Refresh the TypeID pointer in case the table rehashed.
575 TypeID = &TypeMap[Ty];
Joe Abbey2ad8df22012-11-25 15:23:39 +0000576
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000577 // 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;
Joe Abbey2ad8df22012-11-25 15:23:39 +0000584
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000585 // Add this type now that its contents are all happily enumerated.
586 Types.push_back(Ty);
Joe Abbey2ad8df22012-11-25 15:23:39 +0000587
Chris Lattnerb1ed91f2011-07-09 17:41:24 +0000588 *TypeID = Types.size();
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000589}
590
Chris Lattner76fd90f2007-05-06 08:35:19 +0000591// Enumerate the types for the specified value. If the value is a constant,
592// walk through it, enumerating the types of the constant.
Victor Hernandez572218b2010-01-14 19:54:11 +0000593void ValueEnumerator::EnumerateOperandType(const Value *V) {
Chris Lattner76fd90f2007-05-06 08:35:19 +0000594 EnumerateType(V->getType());
Joe Abbey2ad8df22012-11-25 15:23:39 +0000595
Chris Lattner76fd90f2007-05-06 08:35:19 +0000596 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.
Chris Lattnerf540d742009-10-28 05:24:40 +0000603 for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
Jay Foad0159a1e2011-04-11 09:48:55 +0000604 const Value *Op = C->getOperand(i);
Joe Abbey2ad8df22012-11-25 15:23:39 +0000605
Chris Lattnerf540d742009-10-28 05:24:40 +0000606 // Don't enumerate basic blocks here, this happens as operands to
607 // blockaddress.
608 if (isa<BasicBlock>(Op)) continue;
Joe Abbey2ad8df22012-11-25 15:23:39 +0000609
Dan Gohman9cfe5322010-08-25 17:09:03 +0000610 EnumerateOperandType(Op);
Chris Lattnerf540d742009-10-28 05:24:40 +0000611 }
Nick Lewyckyb8f9b7a2009-05-10 20:57:05 +0000612
613 if (const MDNode *N = dyn_cast<MDNode>(V)) {
Chris Lattner9b493022009-12-31 01:22:29 +0000614 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
615 if (Value *Elem = N->getOperand(i))
Victor Hernandez572218b2010-01-14 19:54:11 +0000616 EnumerateOperandType(Elem);
Nick Lewyckyb8f9b7a2009-05-10 20:57:05 +0000617 }
Devang Patele059ba6e2009-07-23 01:07:34 +0000618 } else if (isa<MDString>(V) || isa<MDNode>(V))
Dan Gohmanab09a122010-08-24 02:10:52 +0000619 EnumerateMetadata(V);
Chris Lattner76fd90f2007-05-06 08:35:19 +0000620}
621
Bill Wendling7b5f4f32013-02-12 08:01:22 +0000622void ValueEnumerator::EnumerateAttributes(AttributeSet PAL) {
Chris Lattner8a923e72008-03-12 17:45:29 +0000623 if (PAL.isEmpty()) return; // null is always 0.
Bill Wendling7b5f4f32013-02-12 08:01:22 +0000624
Chris Lattnere4bbad62007-05-03 22:46:43 +0000625 // Do a lookup.
Bill Wendling7b5f4f32013-02-12 08:01:22 +0000626 unsigned &Entry = AttributeMap[PAL];
Chris Lattnere4bbad62007-05-03 22:46:43 +0000627 if (Entry == 0) {
628 // Never saw this before, add it.
Bill Wendling3d7b0b82012-12-19 07:18:57 +0000629 Attribute.push_back(PAL);
630 Entry = Attribute.size();
Chris Lattnere4bbad62007-05-03 22:46:43 +0000631 }
Bill Wendling51f612e2013-02-10 23:06:02 +0000632
633 // Do lookups for all attribute groups.
634 for (unsigned i = 0, e = PAL.getNumSlots(); i != e; ++i) {
635 AttributeSet AS = PAL.getSlotAttributes(i);
Bill Wendling92ed7002013-02-11 22:33:26 +0000636 unsigned &Entry = AttributeGroupMap[AS];
Bill Wendling51f612e2013-02-10 23:06:02 +0000637 if (Entry == 0) {
Bill Wendling92ed7002013-02-11 22:33:26 +0000638 AttributeGroups.push_back(AS);
639 Entry = AttributeGroups.size();
Bill Wendling51f612e2013-02-10 23:06:02 +0000640 }
641 }
Chris Lattnere4bbad62007-05-03 22:46:43 +0000642}
643
Chad Rosier6a11b642011-06-03 17:02:19 +0000644void ValueEnumerator::incorporateFunction(const Function &F) {
Nick Lewyckya72e1af2010-02-25 08:30:17 +0000645 InstructionCount = 0;
Chris Lattnere6e364c2007-04-26 05:53:54 +0000646 NumModuleValues = Values.size();
Dan Gohmanc828c542010-08-24 02:24:03 +0000647 NumModuleMDValues = MDValues.size();
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000648
Chris Lattner5f640b92007-04-26 03:50:57 +0000649 // Adding function arguments to the value table.
Dan Gohman9a54c172010-07-16 22:58:39 +0000650 for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
651 I != E; ++I)
Chris Lattner5f640b92007-04-26 03:50:57 +0000652 EnumerateValue(I);
653
Chris Lattnere6e364c2007-04-26 05:53:54 +0000654 FirstFuncConstantID = Values.size();
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000655
Chris Lattner5f640b92007-04-26 03:50:57 +0000656 // 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)
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000659 for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
Chris Lattner5f640b92007-04-26 03:50:57 +0000660 OI != E; ++OI) {
661 if ((isa<Constant>(*OI) && !isa<GlobalValue>(*OI)) ||
662 isa<InlineAsm>(*OI))
663 EnumerateValue(*OI);
664 }
Chris Lattner7c37b012007-04-26 04:42:16 +0000665 BasicBlocks.push_back(BB);
Chris Lattner6be58c62007-05-03 22:18:21 +0000666 ValueMap[BB] = BasicBlocks.size();
Chris Lattner5f640b92007-04-26 03:50:57 +0000667 }
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000668
Chris Lattner430e80d2007-05-04 05:21:47 +0000669 // Optimize the constant layout.
670 OptimizeConstants(FirstFuncConstantID, Values.size());
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000671
Duncan Sandsad0ea2d2007-11-27 13:23:08 +0000672 // Add the function's parameter attributes so they are available for use in
673 // the function's instruction.
Devang Patel4c758ea2008-09-25 21:00:45 +0000674 EnumerateAttributes(F.getAttributes());
Duncan Sandsad0ea2d2007-11-27 13:23:08 +0000675
Chris Lattnere6e364c2007-04-26 05:53:54 +0000676 FirstInstID = Values.size();
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000677
Devang Pateldf84e8b2010-06-02 23:05:04 +0000678 SmallVector<MDNode *, 8> FnLocalMDVector;
Chris Lattner5f640b92007-04-26 03:50:57 +0000679 // Add all of the instructions.
680 for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000681 for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) {
Victor Hernandezcad73282010-01-13 19:36:16 +0000682 for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
683 OI != E; ++OI) {
Victor Hernandez572218b2010-01-14 19:54:11 +0000684 if (MDNode *MD = dyn_cast<MDNode>(*OI))
Victor Hernandez1b081382010-02-06 01:21:09 +0000685 if (MD->isFunctionLocal() && MD->getFunction())
Victor Hernandezd44ee352010-02-04 01:13:08 +0000686 // Enumerate metadata after the instructions they might refer to.
Devang Pateldf84e8b2010-06-02 23:05:04 +0000687 FnLocalMDVector.push_back(MD);
Victor Hernandezcad73282010-01-13 19:36:16 +0000688 }
Dan Gohmanc828c542010-08-24 02:24:03 +0000689
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 }
Joe Abbey2ad8df22012-11-25 15:23:39 +0000697
Benjamin Kramerccce8ba2010-01-05 13:12:22 +0000698 if (!I->getType()->isVoidTy())
Chris Lattner5f640b92007-04-26 03:50:57 +0000699 EnumerateValue(I);
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000700 }
701 }
Victor Hernandezd44ee352010-02-04 01:13:08 +0000702
703 // Add all of the function-local metadata.
Devang Pateldf84e8b2010-06-02 23:05:04 +0000704 for (unsigned i = 0, e = FnLocalMDVector.size(); i != e; ++i)
Dan Gohmanc828c542010-08-24 02:24:03 +0000705 EnumerateFunctionLocalMetadata(FnLocalMDVector[i]);
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000706}
707
Chad Rosier6a11b642011-06-03 17:02:19 +0000708void ValueEnumerator::purgeFunction() {
Chris Lattner5f640b92007-04-26 03:50:57 +0000709 /// Remove purged values from the ValueMap.
Chris Lattnere6e364c2007-04-26 05:53:54 +0000710 for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i)
Chris Lattner5f640b92007-04-26 03:50:57 +0000711 ValueMap.erase(Values[i].first);
Dan Gohmanc828c542010-08-24 02:24:03 +0000712 for (unsigned i = NumModuleMDValues, e = MDValues.size(); i != e; ++i)
713 MDValueMap.erase(MDValues[i].first);
Chris Lattner7c37b012007-04-26 04:42:16 +0000714 for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i)
715 ValueMap.erase(BasicBlocks[i]);
Daniel Dunbar7d6781b2009-09-20 02:20:51 +0000716
Chris Lattnere6e364c2007-04-26 05:53:54 +0000717 Values.resize(NumModuleValues);
Dan Gohmanc828c542010-08-24 02:24:03 +0000718 MDValues.resize(NumModuleMDValues);
Chris Lattner7c37b012007-04-26 04:42:16 +0000719 BasicBlocks.clear();
Dan Gohman22161da2010-08-25 17:11:16 +0000720 FunctionLocalMDs.clear();
Chris Lattnerc1d10d62007-04-22 06:24:45 +0000721}
Chris Lattnerf540d742009-10-28 05:24:40 +0000722
723static 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.
733unsigned ValueEnumerator::getGlobalBasicBlockID(const BasicBlock *BB) const {
734 unsigned &Idx = GlobalBasicBlockIDs[BB];
735 if (Idx != 0)
Chris Lattneraa99c942009-11-01 01:27:45 +0000736 return Idx-1;
Chris Lattnerf540d742009-10-28 05:24:40 +0000737
738 IncorporateFunctionInfoGlobalBBIDs(BB->getParent(), GlobalBasicBlockIDs);
739 return getGlobalBasicBlockID(BB);
740}
741