diff options
| author | Dan Gohman <gohman@apple.com> | 2007-08-10 14:59:38 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2007-08-10 14:59:38 +0000 |
| commit | a17799a3bd2e61dec908c2042cb4e0f983935f65 (patch) | |
| tree | 70004f40797cbeb2af9d4641412bc0d9fb0acd57 /llvm | |
| parent | 66011c17d539d1ec93a145d7db6c0381494a826f (diff) | |
| download | bcm5719-llvm-a17799a3bd2e61dec908c2042cb4e0f983935f65.tar.gz bcm5719-llvm-a17799a3bd2e61dec908c2042cb4e0f983935f65.zip | |
Fix EXTRACT_ELEMENT, EXTRACT_SUBVECTOR, and EXTRACT_VECTOR_ELT to
use an intptr ValueType instead of i32 for the index operand in
getCopyToParts.
llvm-svn: 40987
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/insertelement-copytoregs.ll | 11 |
2 files changed, 16 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index df40972196b..90ed4545bd0 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -718,6 +718,8 @@ static void getCopyToParts(SelectionDAG &DAG, SDOperand *Parts, unsigned NumParts, MVT::ValueType PartVT) { + TargetLowering &TLI = DAG.getTargetLoweringInfo(); + MVT::ValueType PtrVT = TLI.getPointerTy(); MVT::ValueType ValueVT = Val.getValueType(); if (!MVT::isVector(ValueVT) || NumParts == 1) { @@ -725,7 +727,7 @@ static void getCopyToParts(SelectionDAG &DAG, if (NumParts > 1) { for (unsigned i = 0; i != NumParts; ++i) Parts[i] = DAG.getNode(ISD::EXTRACT_ELEMENT, PartVT, Val, - DAG.getConstant(i, MVT::i32)); + DAG.getConstant(i, PtrVT)); if (!DAG.getTargetLoweringInfo().isLittleEndian()) std::reverse(Parts, Parts + NumParts); return; @@ -776,11 +778,11 @@ static void getCopyToParts(SelectionDAG &DAG, Ops[i] = DAG.getNode(ISD::EXTRACT_SUBVECTOR, IntermediateVT, Val, DAG.getConstant(i * (NumElements / NumIntermediates), - MVT::i32)); + PtrVT)); else Ops[i] = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, IntermediateVT, Val, - DAG.getConstant(i, MVT::i32)); + DAG.getConstant(i, PtrVT)); // Split the intermediate operands into legal parts. if (NumParts == NumIntermediates) { diff --git a/llvm/test/CodeGen/X86/insertelement-copytoregs.ll b/llvm/test/CodeGen/X86/insertelement-copytoregs.ll new file mode 100644 index 00000000000..0eef5173b85 --- /dev/null +++ b/llvm/test/CodeGen/X86/insertelement-copytoregs.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep -v IMPLICIT_DEF + +define void @foo(<2 x float>* %p) { + %t = insertelement <2 x float> undef, float 0.0, i32 0 + %v = insertelement <2 x float> %t, float 0.0, i32 1 + br label %bb8 + +bb8: + store <2 x float> %v, <2 x float>* %p + ret void +} |

