diff options
author | Craig Topper <craig.topper@intel.com> | 2017-06-19 16:23:46 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2017-06-19 16:23:46 +0000 |
commit | ef85498e05e62325760b3e6e439984893d9d7c3e (patch) | |
tree | 08c648a5bb2a4f7e2775a9ceb60cf4c216ccd9d0 /llvm/lib/Transforms | |
parent | 4350734d36dad4e1eed915f3c12984cca2dbcd5a (diff) | |
download | bcm5719-llvm-ef85498e05e62325760b3e6e439984893d9d7c3e.tar.gz bcm5719-llvm-ef85498e05e62325760b3e6e439984893d9d7c3e.zip |
[Reassociate] Support some reassociation of vector xors
Summary:
Currently we don't try to do anything with vector xors.
This patch adds support for removing duplicate pairs from a chain of vector xors as its pretty easy to support. We still dont' try to combine the xors with and/ors, but I might try that in a future patch.
Reviewers: mcrosier, davide, resistor
Reviewed By: mcrosier
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D34338
llvm-svn: 305704
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/Reassociate.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/Reassociate.cpp b/llvm/lib/Transforms/Scalar/Reassociate.cpp index 4ce32e0eca7..313b1d12009 100644 --- a/llvm/lib/Transforms/Scalar/Reassociate.cpp +++ b/llvm/lib/Transforms/Scalar/Reassociate.cpp @@ -1276,9 +1276,15 @@ Value *ReassociatePass::OptimizeXor(Instruction *I, if (Ops.size() == 1) return nullptr; + Type *Ty = Ops[0].Op->getType(); + + // TODO: We should optimize vector Xor instructions, but they are + // currently unsupported. + if (Ty->isVectorTy()) + return nullptr; + SmallVector<XorOpnd, 8> Opnds; SmallVector<XorOpnd*, 8> OpndPtrs; - Type *Ty = Ops[0].Op->getType(); APInt ConstOpnd(Ty->getIntegerBitWidth(), 0); // Step 1: Convert ValueEntry to XorOpnd @@ -2000,11 +2006,6 @@ void ReassociatePass::OptimizeInst(Instruction *I) { if (I->isCommutative()) canonicalizeOperands(I); - // TODO: We should optimize vector Xor instructions, but they are - // currently unsupported. - if (I->getType()->isVectorTy() && I->getOpcode() == Instruction::Xor) - return; - // Don't optimize floating point instructions that don't have unsafe algebra. if (I->getType()->isFPOrFPVectorTy() && !I->hasUnsafeAlgebra()) return; |