diff options
author | Chris Lattner <sabre@nondot.org> | 2009-10-28 05:14:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-10-28 05:14:34 +0000 |
commit | 0eeb913aa17a68b1f2963b02ca1d68f09dba0b78 (patch) | |
tree | 59af809ede34a9dd1b0bd71d65537f2787b08ebe /include | |
parent | 46b3abc9f759ed4bbf88be611cc577b21a8ffa8b (diff) |
Previously, all operands to Constant were themselves constant.
In the new world order, BlockAddress can have a BasicBlock operand.
This doesn't permute much, because if you have a ConstantExpr (or
anything more specific than Constant) we still know the operand has
to be a Constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85375 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Constant.h | 19 | ||||
-rw-r--r-- | include/llvm/Constants.h | 4 |
2 files changed, 12 insertions, 11 deletions
diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h index a42c7d4371..bcaa56e390 100644 --- a/include/llvm/Constant.h +++ b/include/llvm/Constant.h @@ -48,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. @@ -83,16 +87,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<Constant*>(User::getOperand(i)); - } - const Constant *getOperand(unsigned i) const { - return static_cast<const Constant*>(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*>(User::getOperand(i)); } - void setOperand(unsigned i, Constant *C) { - User::setOperand(i, C); + const User *getOperand(unsigned i) const { + return static_cast<const User*>(User::getOperand(i)); } /// getVectorElements - This method, which is only valid on constant of vector diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 0b881dc688..99928d9b85 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -564,7 +564,7 @@ public: static BlockAddress *get(BasicBlock *BB); /// Transparently provide more efficient getOperand methods. - DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant); + DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); Function *getFunction() const { return (Function*)Op<0>().get(); } BasicBlock *getBasicBlock() const { return (BasicBlock*)Op<1>().get(); } @@ -587,7 +587,7 @@ template <> struct OperandTraits<BlockAddress> : public FixedNumOperandTraits<2> { }; -DEFINE_TRANSPARENT_CASTED_OPERAND_ACCESSORS(BlockAddress, Constant) +DEFINE_TRANSPARENT_CASTED_OPERAND_ACCESSORS(BlockAddress, Value) //===----------------------------------------------------------------------===// /// ConstantExpr - a constant value that is initialized with an expression using |