mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-15 23:57:48 +00:00
devirtualize Constant::isNullValue:
4 files changed, 15 insertions(+), 60 deletions(-) llvm-svn: 135252
This commit is contained in:
parent
a3a07274c9
commit
6274327fff
@ -50,7 +50,7 @@ protected:
|
||||
public:
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue.
|
||||
virtual bool isNullValue() const = 0;
|
||||
bool isNullValue() const;
|
||||
|
||||
/// isNegativeZeroValue - Return true if the value is what would be returned
|
||||
/// by getZeroValueForNegation.
|
||||
|
@ -149,14 +149,6 @@ public:
|
||||
static bool isValueValidForType(const Type *Ty, uint64_t V);
|
||||
static bool isValueValidForType(const Type *Ty, int64_t V);
|
||||
|
||||
/// This function will return true iff this constant represents the "null"
|
||||
/// value that would be returned by the getNullValue method.
|
||||
/// @returns true if this is the null integer value.
|
||||
/// @brief Determine if the value is null.
|
||||
virtual bool isNullValue() const {
|
||||
return Val == 0;
|
||||
}
|
||||
|
||||
bool isNegative() const { return Val.isNegative(); }
|
||||
|
||||
/// This is just a convenience method to make client code smaller for a
|
||||
@ -267,11 +259,6 @@ public:
|
||||
static bool isValueValidForType(const Type *Ty, const APFloat &V);
|
||||
inline const APFloat &getValueAPF() const { return Val; }
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue. For ConstantFP, this is +0.0, but not -0.0. To handle the
|
||||
/// two the same, use isZero().
|
||||
virtual bool isNullValue() const;
|
||||
|
||||
/// isZero - Return true if the value is positive or negative zero.
|
||||
bool isZero() const { return Val.isZero(); }
|
||||
|
||||
@ -323,10 +310,6 @@ protected:
|
||||
public:
|
||||
static ConstantAggregateZero* get(const Type *Ty);
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue.
|
||||
virtual bool isNullValue() const { return true; }
|
||||
|
||||
virtual void destroyConstant();
|
||||
|
||||
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
@ -392,11 +375,6 @@ public:
|
||||
///
|
||||
std::string getAsCString() const;
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue. This always returns false because zero arrays are always
|
||||
/// created as ConstantAggregateZero objects.
|
||||
virtual bool isNullValue() const { return false; }
|
||||
|
||||
virtual void destroyConstant();
|
||||
virtual void replaceUsesOfWithOnConstant(Value *From, Value *To, Use *U);
|
||||
|
||||
@ -457,13 +435,6 @@ public:
|
||||
return reinterpret_cast<const StructType*>(Value::getType());
|
||||
}
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue. This always returns false because zero structs are always
|
||||
/// created as ConstantAggregateZero objects.
|
||||
virtual bool isNullValue() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void destroyConstant();
|
||||
virtual void replaceUsesOfWithOnConstant(Value *From, Value *To, Use *U);
|
||||
|
||||
@ -505,11 +476,6 @@ public:
|
||||
return reinterpret_cast<const VectorType*>(Value::getType());
|
||||
}
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue. This always returns false because zero vectors are always
|
||||
/// created as ConstantAggregateZero objects.
|
||||
virtual bool isNullValue() const { return false; }
|
||||
|
||||
/// This function will return true iff every element in this vector constant
|
||||
/// is set to all ones.
|
||||
/// @returns true iff this constant's emements are all set to all ones.
|
||||
@ -558,10 +524,6 @@ public:
|
||||
/// get() - Static factory methods - Return objects of the specified value
|
||||
static ConstantPointerNull *get(const PointerType *T);
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue.
|
||||
virtual bool isNullValue() const { return true; }
|
||||
|
||||
virtual void destroyConstant();
|
||||
|
||||
/// getType - Specialize the getType() method to always return an PointerType,
|
||||
@ -598,10 +560,6 @@ public:
|
||||
Function *getFunction() const { return (Function*)Op<0>().get(); }
|
||||
BasicBlock *getBasicBlock() const { return (BasicBlock*)Op<1>().get(); }
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue.
|
||||
virtual bool isNullValue() const { return false; }
|
||||
|
||||
virtual void destroyConstant();
|
||||
virtual void replaceUsesOfWithOnConstant(Value *From, Value *To, Use *U);
|
||||
|
||||
@ -858,10 +816,6 @@ public:
|
||||
static Constant *getInsertValue(Constant *Agg, Constant *Val,
|
||||
ArrayRef<unsigned> Idxs);
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue.
|
||||
virtual bool isNullValue() const { return false; }
|
||||
|
||||
/// getOpcode - Return the opcode at the root of this constant expression
|
||||
unsigned getOpcode() const { return getSubclassDataFromValue(); }
|
||||
|
||||
@ -944,10 +898,6 @@ public:
|
||||
///
|
||||
static UndefValue *get(const Type *T);
|
||||
|
||||
/// isNullValue - Return true if this is the value that would be returned by
|
||||
/// getNullValue.
|
||||
virtual bool isNullValue() const { return false; }
|
||||
|
||||
virtual void destroyConstant();
|
||||
|
||||
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||
|
@ -258,10 +258,6 @@ public:
|
||||
|
||||
/// @}
|
||||
|
||||
/// Override from Constant class. No GlobalValue's are null values so this
|
||||
/// always returns false.
|
||||
virtual bool isNullValue() const { return false; }
|
||||
|
||||
/// Override from Constant class.
|
||||
virtual void destroyConstant();
|
||||
|
||||
|
@ -49,6 +49,19 @@ bool Constant::isNegativeZeroValue() const {
|
||||
return isNullValue();
|
||||
}
|
||||
|
||||
bool Constant::isNullValue() const {
|
||||
// 0 is null.
|
||||
if (const ConstantInt *CI = dyn_cast<ConstantInt>(this))
|
||||
return CI->isZero();
|
||||
|
||||
// +0.0 is null.
|
||||
if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
|
||||
return CFP->isZero() && !CFP->isNegative();
|
||||
|
||||
// constant zero is zero for aggregates and cpnull is null for pointers.
|
||||
return isa<ConstantAggregateZero>(this) || isa<ConstantPointerNull>(this);
|
||||
}
|
||||
|
||||
// Constructor to create a '0' constant of arbitrary type...
|
||||
Constant *Constant::getNullValue(const Type *Ty) {
|
||||
switch (Ty->getTypeID()) {
|
||||
@ -551,11 +564,7 @@ ConstantFP::ConstantFP(const Type *Ty, const APFloat& V)
|
||||
"FP type Mismatch");
|
||||
}
|
||||
|
||||
bool ConstantFP::isNullValue() const {
|
||||
return Val.isZero() && !Val.isNegative();
|
||||
}
|
||||
|
||||
bool ConstantFP::isExactlyValue(const APFloat& V) const {
|
||||
bool ConstantFP::isExactlyValue(const APFloat &V) const {
|
||||
return Val.bitwiseIsEqual(V);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user