Add specific classes for Add, Sub, and Mul, for convenience.

llvm-svn: 76981
This commit is contained in:
Dan Gohman 2009-07-24 18:12:25 +00:00
parent 2a1b5af130
commit 799ac53de1
1 changed files with 51 additions and 0 deletions

View File

@ -101,6 +101,57 @@ public:
}
};
/// AddOperator - Utility class for integer addition operators.
///
class AddOperator : public OverflowingBinaryOperator {
public:
static inline bool classof(const AddOperator *) { return true; }
static inline bool classof(const Instruction *I) {
return I->getOpcode() == Instruction::Add;
}
static inline bool classof(const ConstantExpr *CE) {
return CE->getOpcode() == Instruction::Add;
}
static inline bool classof(const Value *V) {
return (isa<Instruction>(V) && classof(cast<Instruction>(V))) ||
(isa<ConstantExpr>(V) && classof(cast<ConstantExpr>(V)));
}
};
/// SubOperator - Utility class for integer subtraction operators.
///
class SubOperator : public OverflowingBinaryOperator {
public:
static inline bool classof(const SubOperator *) { return true; }
static inline bool classof(const Instruction *I) {
return I->getOpcode() == Instruction::Sub;
}
static inline bool classof(const ConstantExpr *CE) {
return CE->getOpcode() == Instruction::Sub;
}
static inline bool classof(const Value *V) {
return (isa<Instruction>(V) && classof(cast<Instruction>(V))) ||
(isa<ConstantExpr>(V) && classof(cast<ConstantExpr>(V)));
}
};
/// MulOperator - Utility class for integer multiplication operators.
///
class MulOperator : public OverflowingBinaryOperator {
public:
static inline bool classof(const MulOperator *) { return true; }
static inline bool classof(const Instruction *I) {
return I->getOpcode() == Instruction::Mul;
}
static inline bool classof(const ConstantExpr *CE) {
return CE->getOpcode() == Instruction::Mul;
}
static inline bool classof(const Value *V) {
return (isa<Instruction>(V) && classof(cast<Instruction>(V))) ||
(isa<ConstantExpr>(V) && classof(cast<ConstantExpr>(V)));
}
};
/// SDivOperator - An Operator with opcode Instruction::SDiv.
///
class SDivOperator : public Operator {