forked from OSchip/llvm-project
[IR] Move a few static functions in Instruction class inline.
They just check for certain opcodes and opcode enums are available in Instruction.h. llvm-svn: 298237
This commit is contained in:
parent
c69955c6f3
commit
f4fa291d83
|
@ -383,11 +383,20 @@ public:
|
||||||
///
|
///
|
||||||
/// Commutative operators satisfy: (x op y) === (y op x)
|
/// Commutative operators satisfy: (x op y) === (y op x)
|
||||||
///
|
///
|
||||||
/// In LLVM, these are the associative operators, plus SetEQ and SetNE, when
|
/// In LLVM, these are the commutative operators, plus SetEQ and SetNE, when
|
||||||
/// applied to any type.
|
/// applied to any type.
|
||||||
///
|
///
|
||||||
bool isCommutative() const { return isCommutative(getOpcode()); }
|
bool isCommutative() const { return isCommutative(getOpcode()); }
|
||||||
static bool isCommutative(unsigned op);
|
static bool isCommutative(unsigned Opcode) {
|
||||||
|
switch (Opcode) {
|
||||||
|
case Add: case FAdd:
|
||||||
|
case Mul: case FMul:
|
||||||
|
case And: case Or: case Xor:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Return true if the instruction is idempotent:
|
/// Return true if the instruction is idempotent:
|
||||||
///
|
///
|
||||||
|
@ -396,7 +405,9 @@ public:
|
||||||
/// In LLVM, the And and Or operators are idempotent.
|
/// In LLVM, the And and Or operators are idempotent.
|
||||||
///
|
///
|
||||||
bool isIdempotent() const { return isIdempotent(getOpcode()); }
|
bool isIdempotent() const { return isIdempotent(getOpcode()); }
|
||||||
static bool isIdempotent(unsigned op);
|
static bool isIdempotent(unsigned Opcode) {
|
||||||
|
return Opcode == And || Opcode == Or;
|
||||||
|
}
|
||||||
|
|
||||||
/// Return true if the instruction is nilpotent:
|
/// Return true if the instruction is nilpotent:
|
||||||
///
|
///
|
||||||
|
@ -408,7 +419,9 @@ public:
|
||||||
/// In LLVM, the Xor operator is nilpotent.
|
/// In LLVM, the Xor operator is nilpotent.
|
||||||
///
|
///
|
||||||
bool isNilpotent() const { return isNilpotent(getOpcode()); }
|
bool isNilpotent() const { return isNilpotent(getOpcode()); }
|
||||||
static bool isNilpotent(unsigned op);
|
static bool isNilpotent(unsigned Opcode) {
|
||||||
|
return Opcode == Xor;
|
||||||
|
}
|
||||||
|
|
||||||
/// Return true if this instruction may modify memory.
|
/// Return true if this instruction may modify memory.
|
||||||
bool mayWriteToMemory() const;
|
bool mayWriteToMemory() const;
|
||||||
|
|
|
@ -569,51 +569,6 @@ bool Instruction::isAssociative() const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return true if the instruction is commutative:
|
|
||||||
///
|
|
||||||
/// Commutative operators satisfy: (x op y) === (y op x)
|
|
||||||
///
|
|
||||||
/// In LLVM, these are the associative operators, plus SetEQ and SetNE, when
|
|
||||||
/// applied to any type.
|
|
||||||
///
|
|
||||||
bool Instruction::isCommutative(unsigned op) {
|
|
||||||
switch (op) {
|
|
||||||
case Add:
|
|
||||||
case FAdd:
|
|
||||||
case Mul:
|
|
||||||
case FMul:
|
|
||||||
case And:
|
|
||||||
case Or:
|
|
||||||
case Xor:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return true if the instruction is idempotent:
|
|
||||||
///
|
|
||||||
/// Idempotent operators satisfy: x op x === x
|
|
||||||
///
|
|
||||||
/// In LLVM, the And and Or operators are idempotent.
|
|
||||||
///
|
|
||||||
bool Instruction::isIdempotent(unsigned Opcode) {
|
|
||||||
return Opcode == And || Opcode == Or;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return true if the instruction is nilpotent:
|
|
||||||
///
|
|
||||||
/// Nilpotent operators satisfy: x op x === Id,
|
|
||||||
///
|
|
||||||
/// where Id is the identity for the operator, i.e. a constant such that
|
|
||||||
/// x op Id === x and Id op x === x for all x.
|
|
||||||
///
|
|
||||||
/// In LLVM, the Xor operator is nilpotent.
|
|
||||||
///
|
|
||||||
bool Instruction::isNilpotent(unsigned Opcode) {
|
|
||||||
return Opcode == Xor;
|
|
||||||
}
|
|
||||||
|
|
||||||
Instruction *Instruction::cloneImpl() const {
|
Instruction *Instruction::cloneImpl() const {
|
||||||
llvm_unreachable("Subclass of Instruction failed to implement cloneImpl");
|
llvm_unreachable("Subclass of Instruction failed to implement cloneImpl");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue