blob: bc5b7a9f81cb5d4b892740f4a85790bbe3b87dab [file] [log] [blame]
Chris Lattner2f7c9632001-06-06 20:29:01 +00001//===-- Value.cpp - Implement the Value class -----------------------------===//
Misha Brukmanb1c93172005-04-21 23:48:37 +00002//
John Criswell482202a2003-10-20 19:43:21 +00003// 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.
Misha Brukmanb1c93172005-04-21 23:48:37 +00007//
John Criswell482202a2003-10-20 19:43:21 +00008//===----------------------------------------------------------------------===//
Chris Lattner2f7c9632001-06-06 20:29:01 +00009//
Misha Brukmanb1c93172005-04-21 23:48:37 +000010// This file implements the Value and User classes.
Chris Lattner2f7c9632001-06-06 20:29:01 +000011//
12//===----------------------------------------------------------------------===//
13
Chris Lattner2c6abea2002-10-09 23:12:59 +000014#include "llvm/Constant.h"
Anton Korobeynikov82c02b22008-05-06 22:52:30 +000015#include "llvm/Constants.h"
Chris Lattnercdb9bfc2005-03-05 19:51:50 +000016#include "llvm/DerivedTypes.h"
17#include "llvm/InstrTypes.h"
Devang Patel1f00b532008-02-21 01:54:02 +000018#include "llvm/Instructions.h"
Chris Lattnercdb9bfc2005-03-05 19:51:50 +000019#include "llvm/Module.h"
Reid Spencer3aaaa0b2007-02-05 20:47:22 +000020#include "llvm/ValueSymbolTable.h"
Bill Wendling6a462f12006-11-17 08:03:48 +000021#include "llvm/Support/Debug.h"
Reid Spencer7c16caa2004-09-01 22:55:40 +000022#include "llvm/Support/LeakDetector.h"
Chris Lattner2f7c9632001-06-06 20:29:01 +000023#include <algorithm>
Chris Lattner189d19f2003-11-21 20:23:48 +000024using namespace llvm;
Brian Gaeke960707c2003-11-11 22:41:34 +000025
Chris Lattner2f7c9632001-06-06 20:29:01 +000026//===----------------------------------------------------------------------===//
27// Value Class
28//===----------------------------------------------------------------------===//
29
Chris Lattner25450e32001-12-13 00:41:27 +000030static inline const Type *checkType(const Type *Ty) {
31 assert(Ty && "Value defined with a null type: Error!");
32 return Ty;
33}
34
Chris Lattner32ab6432007-02-12 05:18:08 +000035Value::Value(const Type *ty, unsigned scid)
Evan Chenga05c07e2008-07-24 00:08:56 +000036 : SubclassID(scid), SubclassData(0), VTy(checkType(ty)),
Chris Lattner32ab6432007-02-12 05:18:08 +000037 UseList(0), Name(0) {
Devang Patelad582fc2008-02-21 02:14:01 +000038 if (isa<CallInst>(this) || isa<InvokeInst>(this))
Evan Chenga05c07e2008-07-24 00:08:56 +000039 assert((VTy->isFirstClassType() || VTy == Type::VoidTy ||
40 isa<OpaqueType>(ty) || VTy->getTypeID() == Type::StructTyID) &&
Devang Patel1f00b532008-02-21 01:54:02 +000041 "invalid CallInst type!");
42 else if (!isa<Constant>(this) && !isa<BasicBlock>(this))
Evan Chenga05c07e2008-07-24 00:08:56 +000043 assert((VTy->isFirstClassType() || VTy == Type::VoidTy ||
Chris Lattner9df9afd2004-07-07 18:07:46 +000044 isa<OpaqueType>(ty)) &&
Chris Lattnerbea72472004-07-06 17:44:17 +000045 "Cannot create non-first-class values except for constants!");
Chris Lattner2f7c9632001-06-06 20:29:01 +000046}
47
Gordon Henriksen14a55692007-12-10 02:14:30 +000048Value::~Value() {
Chris Lattner2f7c9632001-06-06 20:29:01 +000049#ifndef NDEBUG // Only in -g mode...
Chris Lattner874ddad2001-06-11 15:04:40 +000050 // Check to make sure that there are no uses of this value that are still
51 // around when the value is destroyed. If there are, then we have a dangling
52 // reference and something is wrong. This code is here to print out what is
Misha Brukmanb1c93172005-04-21 23:48:37 +000053 // still being referenced. The value in question should be printed as
Chris Lattner874ddad2001-06-11 15:04:40 +000054 // a <badref>
55 //
Gordon Henriksen14a55692007-12-10 02:14:30 +000056 if (!use_empty()) {
Evan Chenga05c07e2008-07-24 00:08:56 +000057 DOUT << "While deleting: " << *VTy << " %" << getNameStr() << "\n";
Gordon Henriksen14a55692007-12-10 02:14:30 +000058 for (use_iterator I = use_begin(), E = use_end(); I != E; ++I)
Bill Wendling6a462f12006-11-17 08:03:48 +000059 DOUT << "Use still stuck around after Def is destroyed:"
60 << **I << "\n";
Chris Lattner2f7c9632001-06-06 20:29:01 +000061 }
62#endif
Gordon Henriksen14a55692007-12-10 02:14:30 +000063 assert(use_empty() && "Uses remain when a value is destroyed!");
Chris Lattner184b2982002-09-08 18:59:35 +000064
Chris Lattneraf867a32007-03-20 00:18:10 +000065 // If this value is named, destroy the name. This should not be in a symtab
66 // at this point.
Gordon Henriksen14a55692007-12-10 02:14:30 +000067 if (Name)
68 Name->Destroy();
Chris Lattneraf867a32007-03-20 00:18:10 +000069
Chris Lattner184b2982002-09-08 18:59:35 +000070 // There should be no uses of this object anymore, remove it.
Gordon Henriksen14a55692007-12-10 02:14:30 +000071 LeakDetector::removeGarbageObject(this);
Chris Lattner2f7c9632001-06-06 20:29:01 +000072}
73
Chris Lattner4947e672005-02-01 01:24:21 +000074/// hasNUses - Return true if this Value has exactly N users.
75///
76bool Value::hasNUses(unsigned N) const {
77 use_const_iterator UI = use_begin(), E = use_end();
78
79 for (; N; --N, ++UI)
80 if (UI == E) return false; // Too few.
81 return UI == E;
82}
83
Chris Lattnerd36552f2005-02-23 16:51:11 +000084/// hasNUsesOrMore - Return true if this value has N users or more. This is
85/// logically equivalent to getNumUses() >= N.
86///
87bool Value::hasNUsesOrMore(unsigned N) const {
88 use_const_iterator UI = use_begin(), E = use_end();
89
90 for (; N; --N, ++UI)
91 if (UI == E) return false; // Too few.
92
93 return true;
94}
95
Evan Cheng89553cc2008-06-12 21:15:59 +000096/// isUsedInBasicBlock - Return true if this value is used in the specified
97/// basic block.
98bool Value::isUsedInBasicBlock(BasicBlock *BB) const {
99 for (use_const_iterator I = use_begin(), E = use_end(); I != E; ++I) {
100 const Instruction *User = dyn_cast<Instruction>(*I);
101 if (User && User->getParent() == BB)
102 return true;
103 }
104 return false;
105}
106
Chris Lattnerd36552f2005-02-23 16:51:11 +0000107
Chris Lattner4947e672005-02-01 01:24:21 +0000108/// getNumUses - This method computes the number of uses of this Value. This
109/// is a linear time operation. Use hasOneUse or hasNUses to check for specific
110/// values.
111unsigned Value::getNumUses() const {
112 return (unsigned)std::distance(use_begin(), use_end());
113}
114
Chris Lattnerb6250822007-02-11 00:37:27 +0000115static bool getSymTab(Value *V, ValueSymbolTable *&ST) {
Chris Lattner569c8ac2007-02-11 19:12:18 +0000116 ST = 0;
Chris Lattnerb6250822007-02-11 00:37:27 +0000117 if (Instruction *I = dyn_cast<Instruction>(V)) {
118 if (BasicBlock *P = I->getParent())
119 if (Function *PP = P->getParent())
120 ST = &PP->getValueSymbolTable();
121 } else if (BasicBlock *BB = dyn_cast<BasicBlock>(V)) {
122 if (Function *P = BB->getParent())
123 ST = &P->getValueSymbolTable();
124 } else if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
125 if (Module *P = GV->getParent())
126 ST = &P->getValueSymbolTable();
127 } else if (Argument *A = dyn_cast<Argument>(V)) {
128 if (Function *P = A->getParent())
129 ST = &P->getValueSymbolTable();
130 } else {
131 assert(isa<Constant>(V) && "Unknown value type!");
132 return true; // no name is setable for this.
133 }
134 return false;
135}
Chris Lattner2c6abea2002-10-09 23:12:59 +0000136
Chris Lattner5109a882007-08-10 15:34:35 +0000137/// getNameStart - Return a pointer to a null terminated string for this name.
138/// Note that names can have null characters within the string as well as at
139/// their end. This always returns a non-null pointer.
140const char *Value::getNameStart() const {
141 if (Name == 0) return "";
142 return Name->getKeyData();
143}
144
145/// getNameLen - Return the length of the string, correctly handling nul
146/// characters embedded into them.
147unsigned Value::getNameLen() const {
Chris Lattner2be9ec52007-09-28 20:09:40 +0000148 return Name ? Name->getKeyLength() : 0;
Chris Lattner5109a882007-08-10 15:34:35 +0000149}
150
Chris Lattnera1d850e2008-04-30 03:55:40 +0000151/// isName - Return true if this value has the name specified by the provided
152/// nul terminated string.
153bool Value::isName(const char *N) const {
154 unsigned InLen = strlen(N);
Chris Lattner78769f02008-04-30 15:27:09 +0000155 return InLen == getNameLen() && memcmp(getNameStart(), N, InLen) == 0;
Chris Lattnera1d850e2008-04-30 03:55:40 +0000156}
157
Chris Lattner5109a882007-08-10 15:34:35 +0000158
Chris Lattnerfd27ed92007-02-15 18:53:54 +0000159std::string Value::getNameStr() const {
Chris Lattner32ab6432007-02-12 05:18:08 +0000160 if (Name == 0) return "";
161 return std::string(Name->getKeyData(),
162 Name->getKeyData()+Name->getKeyLength());
163}
Chris Lattnercdb9bfc2005-03-05 19:51:50 +0000164
Chris Lattner32ab6432007-02-12 05:18:08 +0000165void Value::setName(const std::string &name) {
Chris Lattner1a5de582007-02-12 18:52:59 +0000166 setName(&name[0], name.size());
167}
168
Chris Lattnercb9a6262007-02-13 07:53:34 +0000169void Value::setName(const char *Name) {
170 setName(Name, Name ? strlen(Name) : 0);
171}
172
Chris Lattner1a5de582007-02-12 18:52:59 +0000173void Value::setName(const char *NameStr, unsigned NameLen) {
174 if (NameLen == 0 && !hasName()) return;
Jeff Cohenb622c112007-03-05 00:00:42 +0000175 assert(getType() != Type::VoidTy && "Cannot assign a name to void values!");
Chris Lattner32ab6432007-02-12 05:18:08 +0000176
Chris Lattnerffb37782005-03-06 02:14:28 +0000177 // Get the symbol table to update for this object.
Chris Lattnerb6250822007-02-11 00:37:27 +0000178 ValueSymbolTable *ST;
179 if (getSymTab(this, ST))
180 return; // Cannot set a name on this value (e.g. constant).
Chris Lattnercdb9bfc2005-03-05 19:51:50 +0000181
Chris Lattner32ab6432007-02-12 05:18:08 +0000182 if (!ST) { // No symbol table to update? Just do the change.
Chris Lattner1a5de582007-02-12 18:52:59 +0000183 if (NameLen == 0) {
Chris Lattner32ab6432007-02-12 05:18:08 +0000184 // Free the name for this value.
185 Name->Destroy();
186 Name = 0;
Chris Lattner1a5de582007-02-12 18:52:59 +0000187 return;
Chris Lattnerffb37782005-03-06 02:14:28 +0000188 }
Chris Lattner1a5de582007-02-12 18:52:59 +0000189
190 if (Name) {
191 // Name isn't changing?
192 if (NameLen == Name->getKeyLength() &&
193 !memcmp(Name->getKeyData(), NameStr, NameLen))
194 return;
195 Name->Destroy();
196 }
197
198 // NOTE: Could optimize for the case the name is shrinking to not deallocate
199 // then reallocated.
200
201 // Create the new name.
202 Name = ValueName::Create(NameStr, NameStr+NameLen);
203 Name->setValue(this);
Chris Lattner32ab6432007-02-12 05:18:08 +0000204 return;
Chris Lattnerffb37782005-03-06 02:14:28 +0000205 }
Chris Lattner32ab6432007-02-12 05:18:08 +0000206
207 // NOTE: Could optimize for the case the name is shrinking to not deallocate
208 // then reallocated.
209 if (hasName()) {
210 // Name isn't changing?
Chris Lattner1a5de582007-02-12 18:52:59 +0000211 if (NameLen == Name->getKeyLength() &&
212 !memcmp(Name->getKeyData(), NameStr, NameLen))
Chris Lattner32ab6432007-02-12 05:18:08 +0000213 return;
214
215 // Remove old name.
216 ST->removeValueName(Name);
217 Name->Destroy();
218 Name = 0;
219
Chris Lattner1a5de582007-02-12 18:52:59 +0000220 if (NameLen == 0)
221 return;
Chris Lattner32ab6432007-02-12 05:18:08 +0000222 }
223
224 // Name is changing to something new.
Chris Lattner1a5de582007-02-12 18:52:59 +0000225 Name = ST->createValueName(NameStr, NameLen, this);
Chris Lattnercdb9bfc2005-03-05 19:51:50 +0000226}
227
Chris Lattner1a5de582007-02-12 18:52:59 +0000228
Chris Lattnerb6250822007-02-11 00:37:27 +0000229/// takeName - transfer the name from V to this value, setting V's name to
230/// empty. It is an error to call V->takeName(V).
231void Value::takeName(Value *V) {
Chris Lattnercf835ff2007-02-15 20:01:43 +0000232 ValueSymbolTable *ST = 0;
233 // If this value has a name, drop it.
234 if (hasName()) {
235 // Get the symtab this is in.
236 if (getSymTab(this, ST)) {
237 // We can't set a name on this value, but we need to clear V's name if
238 // it has one.
239 if (V->hasName()) V->setName(0, 0);
240 return; // Cannot set a name on this value (e.g. constant).
241 }
242
243 // Remove old name.
244 if (ST)
245 ST->removeValueName(Name);
246 Name->Destroy();
247 Name = 0;
248 }
249
250 // Now we know that this has no name.
251
252 // If V has no name either, we're done.
253 if (!V->hasName()) return;
254
255 // Get this's symtab if we didn't before.
256 if (!ST) {
257 if (getSymTab(this, ST)) {
258 // Clear V's name.
259 V->setName(0, 0);
260 return; // Cannot set a name on this value (e.g. constant).
261 }
262 }
263
264 // Get V's ST, this should always succed, because V has a name.
265 ValueSymbolTable *VST;
266 bool Failure = getSymTab(V, VST);
Chris Lattner106b0462008-06-21 19:47:03 +0000267 assert(!Failure && "V has a name, so it should have a ST!"); Failure=Failure;
Chris Lattnercf835ff2007-02-15 20:01:43 +0000268
269 // If these values are both in the same symtab, we can do this very fast.
270 // This works even if both values have no symtab yet.
271 if (ST == VST) {
272 // Take the name!
273 Name = V->Name;
274 V->Name = 0;
275 Name->setValue(this);
Chris Lattnercba18e32007-02-11 01:04:09 +0000276 return;
277 }
278
Chris Lattnercf835ff2007-02-15 20:01:43 +0000279 // Otherwise, things are slightly more complex. Remove V's name from VST and
280 // then reinsert it into ST.
281
282 if (VST)
283 VST->removeValueName(V->Name);
284 Name = V->Name;
285 V->Name = 0;
286 Name->setValue(this);
287
288 if (ST)
289 ST->reinsertValue(this);
Chris Lattnerb6250822007-02-11 00:37:27 +0000290}
291
292
Chris Lattner9f158122003-08-29 05:09:37 +0000293// uncheckedReplaceAllUsesWith - This is exactly the same as replaceAllUsesWith,
294// except that it doesn't have all of the asserts. The asserts fail because we
295// are half-way done resolving types, which causes some types to exist as two
296// different Type*'s at the same time. This is a sledgehammer to work around
297// this problem.
298//
299void Value::uncheckedReplaceAllUsesWith(Value *New) {
Chris Lattner4947e672005-02-01 01:24:21 +0000300 while (!use_empty()) {
301 Use &U = *UseList;
Chris Lattner9f158122003-08-29 05:09:37 +0000302 // Must handle Constants specially, we cannot call replaceUsesOfWith on a
Chris Lattner8e5b2c22007-08-21 00:21:07 +0000303 // constant because they are uniqued.
Chris Lattner079edeb2003-10-16 16:53:07 +0000304 if (Constant *C = dyn_cast<Constant>(U.getUser())) {
Chris Lattner8e5b2c22007-08-21 00:21:07 +0000305 if (!isa<GlobalValue>(C)) {
Chris Lattner7a1450d2005-10-04 18:13:04 +0000306 C->replaceUsesOfWithOnConstant(this, New, &U);
Chris Lattner8e5b2c22007-08-21 00:21:07 +0000307 continue;
308 }
Chris Lattner9f158122003-08-29 05:09:37 +0000309 }
Chris Lattner8e5b2c22007-08-21 00:21:07 +0000310
311 U.set(New);
Chris Lattner9f158122003-08-29 05:09:37 +0000312 }
313}
314
Chris Lattner079edeb2003-10-16 16:53:07 +0000315void Value::replaceAllUsesWith(Value *New) {
316 assert(New && "Value::replaceAllUsesWith(<null>) is invalid!");
317 assert(New != this && "this->replaceAllUsesWith(this) is NOT valid!");
318 assert(New->getType() == getType() &&
319 "replaceAllUses of value with new value of different type!");
Chris Lattner9f158122003-08-29 05:09:37 +0000320
Chris Lattner079edeb2003-10-16 16:53:07 +0000321 uncheckedReplaceAllUsesWith(New);
Chris Lattner2f7c9632001-06-06 20:29:01 +0000322}
323
Anton Korobeynikovfc2edad2008-05-07 22:54:15 +0000324Value *Value::stripPointerCasts() {
325 if (ConstantExpr *CE = dyn_cast<ConstantExpr>(this)) {
326 if (CE->getOpcode() == Instruction::BitCast) {
327 if (isa<PointerType>(CE->getOperand(0)->getType()))
328 return CE->getOperand(0)->stripPointerCasts();
329 } else if (CE->getOpcode() == Instruction::GetElementPtr) {
330 for (unsigned i = 1, e = CE->getNumOperands(); i != e; ++i)
331 if (!CE->getOperand(i)->isNullValue())
332 return this;
333 return CE->getOperand(0)->stripPointerCasts();
334 }
335 return this;
336 }
337
338 if (BitCastInst *CI = dyn_cast<BitCastInst>(this)) {
339 if (isa<PointerType>(CI->getOperand(0)->getType()))
340 return CI->getOperand(0)->stripPointerCasts();
341 } else if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(this)) {
342 if (GEP->hasAllZeroIndices())
343 return GEP->getOperand(0)->stripPointerCasts();
344 }
345 return this;
346}
347
Chris Lattner2f7c9632001-06-06 20:29:01 +0000348//===----------------------------------------------------------------------===//
349// User Class
350//===----------------------------------------------------------------------===//
351
Chris Lattner2f7c9632001-06-06 20:29:01 +0000352// replaceUsesOfWith - Replaces all references to the "From" definition with
353// references to the "To" definition.
354//
355void User::replaceUsesOfWith(Value *From, Value *To) {
356 if (From == To) return; // Duh what?
357
Anton Korobeynikov579f0712008-02-20 11:08:44 +0000358 assert((!isa<Constant>(this) || isa<GlobalValue>(this)) &&
Chris Lattner2c6abea2002-10-09 23:12:59 +0000359 "Cannot call User::replaceUsesofWith on a constant!");
360
Chris Lattnera073acb2001-07-07 08:36:50 +0000361 for (unsigned i = 0, E = getNumOperands(); i != E; ++i)
362 if (getOperand(i) == From) { // Is This operand is pointing to oldval?
Chris Lattner2f7c9632001-06-06 20:29:01 +0000363 // The side effects of this setOperand call include linking to
364 // "To", adding "this" to the uses list of To, and
365 // most importantly, removing "this" from the use list of "From".
Chris Lattnera073acb2001-07-07 08:36:50 +0000366 setOperand(i, To); // Fix it now...
Chris Lattner2f7c9632001-06-06 20:29:01 +0000367 }
Chris Lattner2f7c9632001-06-06 20:29:01 +0000368}
Nate Begeman60f93202008-05-15 01:23:11 +0000369
370void *User::operator new(size_t s, unsigned Us) {
371 void *Storage = ::operator new(s + sizeof(Use) * Us);
372 Use *Start = static_cast<Use*>(Storage);
373 Use *End = Start + Us;
374 User *Obj = reinterpret_cast<User*>(End);
375 Obj->OperandList = Start;
376 Obj->NumOperands = Us;
377 Use::initTags(Start, End);
378 return Obj;
379}
380
381void User::operator delete(void *Usr) {
382 User *Start = static_cast<User*>(Usr);
383 Use *Storage = static_cast<Use*>(Usr) - Start->NumOperands;
384 ::operator delete(Storage == Start->OperandList
385 ? Storage
386 : Usr);
387}