summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-06-19 16:23:46 +0000
committerCraig Topper <craig.topper@intel.com>2017-06-19 16:23:46 +0000
commitef85498e05e62325760b3e6e439984893d9d7c3e (patch)
tree08c648a5bb2a4f7e2775a9ceb60cf4c216ccd9d0 /llvm/lib/Transforms
parent4350734d36dad4e1eed915f3c12984cca2dbcd5a (diff)
downloadbcm5719-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.cpp13
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;
OpenPOWER on IntegriCloud