There is no need for isAssociative to take the type as an argument anymore.

llvm-svn: 122242
This commit is contained in:
Duncan Sands 2010-12-20 13:10:23 +00:00
parent 5a2ce5fbf7
commit 70db5e7cb2
3 changed files with 5 additions and 7 deletions

View File

@ -200,11 +200,10 @@ public:
///
/// Associative operators satisfy: x op (y op z) === (x op y) op z
///
/// In LLVM, the Add, Mul, And, Or, and Xor operators are associative, when
/// not applied to floating point types.
/// In LLVM, the Add, Mul, And, Or, and Xor operators are associative.
///
bool isAssociative() const { return isAssociative(getOpcode(), getType()); }
static bool isAssociative(unsigned op, const Type *Ty);
bool isAssociative() const { return isAssociative(getOpcode()); }
static bool isAssociative(unsigned op);
/// isCommutative - Return true if the instruction is commutative:
///

View File

@ -1338,8 +1338,7 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode,
// Given ((a + b) + c), if (b + c) folds to something interesting, return
// (a + (b + c)).
if (Instruction::isAssociative(Opcode, C1->getType()) &&
CE1->getOpcode() == Opcode) {
if (Instruction::isAssociative(Opcode) && CE1->getOpcode() == Opcode) {
Constant *T = ConstantExpr::get(Opcode, CE1->getOperand(1), C2);
if (!isa<ConstantExpr>(T) || cast<ConstantExpr>(T)->getOpcode() != Opcode)
return ConstantExpr::get(Opcode, CE1->getOperand(0), T);

View File

@ -348,7 +348,7 @@ bool Instruction::mayThrow() const {
///
/// In LLVM, the Add, Mul, And, Or, and Xor operators are associative.
///
bool Instruction::isAssociative(unsigned Opcode, const Type *Ty) {
bool Instruction::isAssociative(unsigned Opcode) {
return Opcode == And || Opcode == Or || Opcode == Xor ||
Opcode == Add || Opcode == Mul;
}