summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorVincent Lejeune <vljn@ovi.com>2013-10-13 17:56:04 +0000
committerVincent Lejeune <vljn@ovi.com>2013-10-13 17:56:04 +0000
commit301beb80d42e4aebcbfb9836210ecf61873143cd (patch)
tree3b9aea8cdc69a3bba166076fccf960893b80253a /llvm/lib/Target
parent533352f6969b67d670b609ca873879c86c6f3911 (diff)
downloadbcm5719-llvm-301beb80d42e4aebcbfb9836210ecf61873143cd.tar.gz
bcm5719-llvm-301beb80d42e4aebcbfb9836210ecf61873143cd.zip
R600: fix swizzle export
llvm-svn: 192553
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/R600/R600ISelLowering.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/Target/R600/R600ISelLowering.cpp b/llvm/lib/Target/R600/R600ISelLowering.cpp
index 62577eabf99..81a28be104a 100644
--- a/llvm/lib/Target/R600/R600ISelLowering.cpp
+++ b/llvm/lib/Target/R600/R600ISelLowering.cpp
@@ -1422,12 +1422,16 @@ static SDValue ReorganizeVector(SelectionDAG &DAG, SDValue VectorEntry,
if (NewBldVec[i].getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
unsigned Idx = dyn_cast<ConstantSDNode>(NewBldVec[i].getOperand(1))
->getZExtValue();
- if (!isUnmovable[Idx]) {
- // Swap i and Idx
- std::swap(NewBldVec[Idx], NewBldVec[i]);
- std::swap(RemapSwizzle[RemapSwizzle[Idx]], RemapSwizzle[RemapSwizzle[i]]);
+ if (i == Idx) {
+ isUnmovable[Idx] = true;
+ continue;
}
- isUnmovable[Idx] = true;
+ if (isUnmovable[Idx])
+ continue;
+ // Swap i and Idx
+ std::swap(NewBldVec[Idx], NewBldVec[i]);
+ std::swap(RemapSwizzle[i], RemapSwizzle[Idx]);
+ break;
}
}
OpenPOWER on IntegriCloud