Skip to content
Snippets Groups Projects
Commit d5f67d8c authored by Chris Lattner's avatar Chris Lattner
Browse files

Implement UndefValue class

llvm-svn: 17040
parent 38a69698
No related branches found
No related tags found
No related merge requests found
......@@ -1098,6 +1098,51 @@ void ConstantPointerNull::destroyConstant() {
}
//---- UndefValue::get() implementation...
//
namespace llvm {
// UndefValue does not take extra "value" argument...
template<class ValType>
struct ConstantCreator<UndefValue, Type, ValType> {
static UndefValue *create(const Type *Ty, const ValType &V) {
return new UndefValue(Ty);
}
};
template<>
struct ConvertConstantType<UndefValue, Type> {
static void convert(UndefValue *OldC, const Type *NewTy) {
// Make everyone now use a constant of the new type.
Constant *New = UndefValue::get(NewTy);
assert(New != OldC && "Didn't replace constant??");
OldC->uncheckedReplaceAllUsesWith(New);
OldC->destroyConstant(); // This constant is now dead, destroy it.
}
};
}
static ValueMap<char, Type, UndefValue> UndefValueConstants;
static char getValType(UndefValue *) {
return 0;
}
UndefValue *UndefValue::get(const Type *Ty) {
return UndefValueConstants.getOrCreate(Ty, 0);
}
// destroyConstant - Remove the constant from the constant table.
//
void UndefValue::destroyConstant() {
UndefValueConstants.remove(this);
destroyConstantImpl();
}
//---- ConstantExpr::get() implementations...
//
typedef std::pair<unsigned, std::vector<Constant*> > ExprMapKeyType;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment