X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FConstant.h;h=8072fd9f498a1bbe6ba967bc28e638c5218533c7;hb=9e6d1d1f5034347d237941f1bf08fba5c1583cd3;hp=80c88b623fc91d14aa3aa9ced4f95a54bfaa22c3;hpb=083a1e059768f6844b9f5292223bb49ad24f52d1;p=oota-llvm.git diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h index 80c88b623fc..8072fd9f498 100644 --- a/include/llvm/Constant.h +++ b/include/llvm/Constant.h @@ -17,6 +17,8 @@ #include "llvm/User.h" namespace llvm { + class APInt; + template class SmallVectorImpl; class LLVMContext; @@ -46,6 +48,10 @@ protected: : User(ty, vty, Ops, NumOps) {} void destroyConstantImpl(); + + void setOperand(unsigned i, Value *V) { + User::setOperand(i, V); + } public: /// isNullValue - Return true if this is the value that would be returned by /// getNullValue. @@ -59,6 +65,10 @@ public: /// true for things like constant expressions that could divide by zero. bool canTrap() const; + /// isConstantUsed - Return true if the constant has users other than constant + /// exprs and other dangling things. + bool isConstantUsed() const; + enum PossibleRelocationsTy { NoRelocation = 0, LocalRelocation = 1, @@ -81,16 +91,13 @@ public: /// FIXME: This really should not be in VMCore. PossibleRelocationsTy getRelocationInfo() const; - // Specialize get/setOperand for Constants as their operands are always - // constants as well. - Constant *getOperand(unsigned i) { - return static_cast(User::getOperand(i)); + // Specialize get/setOperand for Users as their operands are always + // constants or BasicBlocks as well. + User *getOperand(unsigned i) { + return static_cast(User::getOperand(i)); } - const Constant *getOperand(unsigned i) const { - return static_cast(User::getOperand(i)); - } - void setOperand(unsigned i, Constant *C) { - User::setOperand(i, C); + const User *getOperand(unsigned i) const { + return static_cast(User::getOperand(i)); } /// getVectorElements - This method, which is only valid on constant of vector @@ -135,6 +142,17 @@ public: "implemented for all constants that have operands!"); assert(0 && "Constants that do not have operands cannot be using 'From'!"); } + + static Constant* getNullValue(const Type* Ty); + + /// @returns the value for an integer constant of the given type that has all + /// its bits set to true. + /// @brief Get the all ones value + static Constant* getAllOnesValue(const Type* Ty); + + /// getIntegerValue - Return the value for an integer or pointer constant, + /// or a vector thereof, with the given scalar value. + static Constant* getIntegerValue(const Type* Ty, const APInt &V); }; } // End llvm namespace