diff options
author | Suyog Sarda <suyog.sarda@samsung.com> | 2014-12-17 10:34:27 +0000 |
---|---|---|
committer | Suyog Sarda <suyog.sarda@samsung.com> | 2014-12-17 10:34:27 +0000 |
commit | 43fae93da8b5c927d22e7ad0e63cf733c644b440 (patch) | |
tree | d2c60469b55074fcbf4385a5d0c901594b93e81c /llvm/lib/Transforms/Vectorize | |
parent | 372deb091ef44158d60bb4cc28f9110ab948ed2f (diff) | |
download | bcm5719-llvm-43fae93da8b5c927d22e7ad0e63cf733c644b440.tar.gz bcm5719-llvm-43fae93da8b5c927d22e7ad0e63cf733c644b440.zip |
Revert 224119 "This patch recognizes (+ (+ v0, v1) (+ v2, v3)), reorders them for bundling into vector of loads,
and vectorizes it."
This was re-ordering floating point data types resulting in mismatch in output.
llvm-svn: 224424
Diffstat (limited to 'llvm/lib/Transforms/Vectorize')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 26 |
1 files changed, 2 insertions, 24 deletions
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index dafda21da8d..44bfea14670 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -439,13 +439,6 @@ public: /// \returns true if the memory operations A and B are consecutive. bool isConsecutiveAccess(Value *A, Value *B); - /// For consecutive loads (+(+ v0, v1)(+ v2, v3)), Left had v0 and v2 - /// while Right had v1 and v3, which prevented bundling them into - /// a vector of loads. Rorder them so that Left now has v0 and v1 - /// while Right has v2 and v3 enabling their bundling into a vector. - void reorderIfConsecutiveLoads(SmallVectorImpl<Value *> &Left, - SmallVectorImpl<Value *> &Right); - /// \brief Perform LICM and CSE on the newly generated gather sequences. void optimizeGatherSequence(); @@ -1241,7 +1234,6 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth) { if (isa<BinaryOperator>(VL0) && VL0->isCommutative()) { ValueList Left, Right; reorderInputsAccordingToOpcode(VL, Left, Right); - reorderIfConsecutiveLoads (Left, Right); buildTree_rec(Left, Depth + 1); buildTree_rec(Right, Depth + 1); return; @@ -1826,19 +1818,6 @@ bool BoUpSLP::isConsecutiveAccess(Value *A, Value *B) { return X == PtrSCEVB; } -void BoUpSLP::reorderIfConsecutiveLoads(SmallVectorImpl<Value *> &Left, - SmallVectorImpl<Value *> &Right) { - for (unsigned i = 0, e = Left.size(); i < e - 1; ++i) { - if (!isa<LoadInst>(Left[i]) || !isa<LoadInst>(Right[i])) - return; - if (!(isConsecutiveAccess(Left[i], Right[i]) && - isConsecutiveAccess(Right[i], Left[i + 1]))) - continue; - else - std::swap(Left[i + 1], Right[i]); - } -} - void BoUpSLP::setInsertPointAfterBundle(ArrayRef<Value *> VL) { Instruction *VL0 = cast<Instruction>(VL[0]); BasicBlock::iterator NextInst = VL0; @@ -2069,10 +2048,9 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) { case Instruction::Or: case Instruction::Xor: { ValueList LHSVL, RHSVL; - if (isa<BinaryOperator>(VL0) && VL0->isCommutative()) { + if (isa<BinaryOperator>(VL0) && VL0->isCommutative()) reorderInputsAccordingToOpcode(E->Scalars, LHSVL, RHSVL); - reorderIfConsecutiveLoads(LHSVL, RHSVL); - } else + else for (int i = 0, e = E->Scalars.size(); i < e; ++i) { LHSVL.push_back(cast<Instruction>(E->Scalars[i])->getOperand(0)); RHSVL.push_back(cast<Instruction>(E->Scalars[i])->getOperand(1)); |