diff options
author | Vincent Lejeune <vljn@ovi.com> | 2013-07-09 15:03:25 +0000 |
---|---|---|
committer | Vincent Lejeune <vljn@ovi.com> | 2013-07-09 15:03:25 +0000 |
commit | b8aac8d7205b07b65a8e62cd6a79c380d0ffcaac (patch) | |
tree | 266c81c84df79af341f6e0f238e2b25cb6022e68 /llvm/lib/Target/R600/R600ISelLowering.cpp | |
parent | a4d8d2ef2bd01f3f77fdbd5379562bbf3510953b (diff) | |
download | bcm5719-llvm-b8aac8d7205b07b65a8e62cd6a79c380d0ffcaac.tar.gz bcm5719-llvm-b8aac8d7205b07b65a8e62cd6a79c380d0ffcaac.zip |
R600: Fix a rare bug where swizzle optimization returns wrong values
llvm-svn: 185942
Diffstat (limited to 'llvm/lib/Target/R600/R600ISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/R600/R600ISelLowering.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Target/R600/R600ISelLowering.cpp b/llvm/lib/Target/R600/R600ISelLowering.cpp index 4413734b401..ad4fd87b79a 100644 --- a/llvm/lib/Target/R600/R600ISelLowering.cpp +++ b/llvm/lib/Target/R600/R600ISelLowering.cpp @@ -1296,6 +1296,8 @@ static SDValue ReorganizeVector(SelectionDAG &DAG, SDValue VectorEntry, VectorEntry.getOperand(3) }; bool isUnmovable[4] = { false, false, false, false }; + for (unsigned i = 0; i < 4; i++) + RemapSwizzle[i] = i; for (unsigned i = 0; i < 4; i++) { if (NewBldVec[i].getOpcode() == ISD::EXTRACT_VECTOR_ELT) { @@ -1304,8 +1306,7 @@ static SDValue ReorganizeVector(SelectionDAG &DAG, SDValue VectorEntry, if (!isUnmovable[Idx]) { // Swap i and Idx std::swap(NewBldVec[Idx], NewBldVec[i]); - RemapSwizzle[Idx] = i; - RemapSwizzle[i] = Idx; + std::swap(RemapSwizzle[RemapSwizzle[Idx]], RemapSwizzle[RemapSwizzle[i]]); } isUnmovable[Idx] = true; } |