diff options
| author | Craig Topper <craig.topper@gmail.com> | 2011-12-29 03:34:54 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2011-12-29 03:34:54 +0000 |
| commit | 0fdf720ded9b62ecd9042ad36c95617b0964e5e2 (patch) | |
| tree | 685a753724db2e505873ab9c468047ee715400b4 /llvm/lib/Target | |
| parent | 862c9b65be69466b55c0ea621daac99be08d3e77 (diff) | |
| download | bcm5719-llvm-0fdf720ded9b62ecd9042ad36c95617b0964e5e2.tar.gz bcm5719-llvm-0fdf720ded9b62ecd9042ad36c95617b0964e5e2.zip | |
Make LowerBUILD_VECTOR keep node vector types consistent when creating MOVL for v16i16 and v32i8.
llvm-svn: 147337
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 9f309142793..a723f0a2dc7 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -5182,17 +5182,16 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const { if (ExtVT == MVT::i16 || ExtVT == MVT::i8) { Item = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Item); + Item = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, MVT::v4i32, Item); if (VT.getSizeInBits() == 256) { - EVT VT128 = EVT::getVectorVT(*DAG.getContext(), ExtVT, NumElems / 2); - Item = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, VT128, Item); - SDValue ZeroVec = getZeroVector(VT, true, DAG, dl); - return Insert128BitVector(ZeroVec, Item, DAG.getConstant(0, MVT::i32), - DAG, dl); + SDValue ZeroVec = getZeroVector(MVT::v8i32, true, DAG, dl); + Item = Insert128BitVector(ZeroVec, Item, DAG.getConstant(0, MVT::i32), + DAG, dl); + } else { + assert(VT.getSizeInBits() == 128 && "Expected an SSE value type!"); + Item = getShuffleVectorZeroOrUndef(Item, 0, true, + Subtarget->hasXMMInt(), DAG); } - assert(VT.getSizeInBits() == 128 && "Expected an SSE value type!"); - Item = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, MVT::v4i32, Item); - Item = getShuffleVectorZeroOrUndef(Item, 0, true, - Subtarget->hasXMMInt(), DAG); return DAG.getNode(ISD::BITCAST, dl, VT, Item); } } |

