mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-14 11:24:48 +00:00
Refactor operation equivalence checking in BBVectorize by extending Instruction::isSameOperationAs.
Maintaining this kind of checking in different places is dangerous, extending Instruction::isSameOperationAs consolidates this logic into one place. Here I've added an optional flags parameter and two flags that are important for vectorization: CompareIgnoringAlignment and CompareUsingScalarTypes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159329 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -281,6 +281,16 @@ public:
|
||||
/// ignores the SubclassOptionalData flags, which specify conditions
|
||||
/// under which the instruction's result is undefined.
|
||||
bool isIdenticalToWhenDefined(const Instruction *I) const;
|
||||
|
||||
/// When checking for operation equivalence (using isSameOperationAs) it is
|
||||
/// sometimes useful to ignore certain attributes.
|
||||
enum OperationEquivalenceFlags {
|
||||
/// Check for equivalence ignoring load/store alignment.
|
||||
CompareIgnoringAlignment = 1<<0,
|
||||
/// Check for equivalence treating a type and a vector of that type
|
||||
/// as equivalent.
|
||||
CompareUsingScalarTypes = 1<<1
|
||||
};
|
||||
|
||||
/// This function determines if the specified instruction executes the same
|
||||
/// operation as the current one. This means that the opcodes, type, operand
|
||||
@ -290,7 +300,7 @@ public:
|
||||
/// @returns true if the specified instruction is the same operation as
|
||||
/// the current one.
|
||||
/// @brief Determine if one instruction is the same operation as another.
|
||||
bool isSameOperationAs(const Instruction *I) const;
|
||||
bool isSameOperationAs(const Instruction *I, unsigned flags = 0) const;
|
||||
|
||||
/// isUsedOutsideOfBlock - Return true if there are any uses of this
|
||||
/// instruction in blocks other than the specified block. Note that PHI nodes
|
||||
|
Reference in New Issue
Block a user