diff options
author | Chris Lattner <sabre@nondot.org> | 2005-09-27 06:08:32 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-09-27 06:08:32 +0000 |
commit | 225e8dd2f512e3e6840ba7cb1570fdc4d56a853f (patch) | |
tree | 67a27bd3b6c0cf2740ba46ab743883934723d6a1 /include/llvm/Value.h | |
parent | a9ec8ab32bce9021c9501b45eea6bbc76ffeb207 (diff) |
Split SimpleConstantVal up into its components, so each Constant subclass gets
a different enum value. This allows 'classof' for these to be really simple,
not needing to call getType() anymore.
This speeds up isa/dyncast/etc for constants, and also makes them smaller.
For example, the text section of a release build of InstCombine.cpp shrinks
from 230037 bytes to 216363 bytes, a 6% reduction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23466 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Value.h')
-rw-r--r-- | include/llvm/Value.h | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/include/llvm/Value.h b/include/llvm/Value.h index 91c8cbc068..f71491d36e 100644 --- a/include/llvm/Value.h +++ b/include/llvm/Value.h @@ -146,8 +146,19 @@ public: UndefValueVal, // This is an instance of UndefValue ConstantExprVal, // This is an instance of ConstantExpr ConstantAggregateZeroVal, // This is an instance of ConstantAggregateNull - SimpleConstantVal, // This is some other type of Constant + ConstantBoolVal, // This is an instance of ConstantBool + ConstantSIntVal, // This is an instance of ConstantSInt + ConstantUIntVal, // This is an instance of ConstantUInt + ConstantFPVal, // This is an instance of ConstantFP + ConstantArrayVal, // This is an instance of ConstantArray + ConstantStructVal, // This is an instance of ConstantStruct + ConstantPackedVal, // This is an instance of ConstantPacked + ConstantPointerNullVal, // This is an instance of ConstantPointerNull InstructionVal, // This is an instance of Instruction + + // Markers: + ConstantFirstVal = FunctionVal, + ConstantLastVal = ConstantPointerNullVal, }; unsigned getValueType() const { return SubclassID; @@ -194,12 +205,8 @@ void Use::set(Value *V) { // the subtype header files to test to see if the value is a subclass... // template <> inline bool isa_impl<Constant, Value>(const Value &Val) { - return Val.getValueType() == Value::SimpleConstantVal || - Val.getValueType() == Value::FunctionVal || - Val.getValueType() == Value::GlobalVariableVal || - Val.getValueType() == Value::ConstantExprVal || - Val.getValueType() == Value::ConstantAggregateZeroVal || - Val.getValueType() == Value::UndefValueVal; + return Val.getValueType() >= Value::ConstantFirstVal && + Val.getValueType() <= Value::ConstantLastVal; } template <> inline bool isa_impl<Argument, Value>(const Value &Val) { return Val.getValueType() == Value::ArgumentVal; |