diff options
author | Dan Gohman <gohman@apple.com> | 2009-01-29 16:10:46 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-01-29 16:10:46 +0000 |
commit | 197e88f7963946dfdb4770ed27ee246eb087ca10 (patch) | |
tree | b81bd617120f0fad84efc7a2d77dbb93fab883b7 /lib/CodeGen/SelectionDAG/SelectionDAG.cpp | |
parent | b691b704ad90e20b05ca380de12c1dc6aefb1bbb (diff) |
In the case of an extractelement on an insertelement value,
the element indices may be equal if either one is not a
constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63311 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAG.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index ab2c832300..16f17e56f4 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -2597,9 +2597,13 @@ SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, MVT VT, // EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT is often formed when vector // operations are lowered to scalars. if (N1.getOpcode() == ISD::INSERT_VECTOR_ELT) { + // If the indices are the same, return the inserted element. if (N1.getOperand(2) == N2) return N1.getOperand(1); - else + // If the indices are known different, extract the element from + // the original vector. + else if (isa<ConstantSDNode>(N1.getOperand(2)) && + isa<ConstantSDNode>(N2)) return getNode(ISD::EXTRACT_VECTOR_ELT, VT, N1.getOperand(0), N2); } break; |