From 25ac7e8364f475597e2a6f3628fce839583e1f45 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Fri, 10 Aug 2007 14:59:38 +0000 Subject: [PATCH] Fix EXTRACT_ELEMENT, EXTRACT_SUBVECTOR, and EXTRACT_VECTOR_ELT to use an intptr ValueType instead of i32 for the index operand in getCopyToParts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40987 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 8 +++++--- test/CodeGen/X86/insertelement-copytoregs.ll | 11 +++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 test/CodeGen/X86/insertelement-copytoregs.ll diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index df40972196b..90ed4545bd0 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/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/test/CodeGen/X86/insertelement-copytoregs.ll b/test/CodeGen/X86/insertelement-copytoregs.ll new file mode 100644 index 00000000000..0eef5173b85 --- /dev/null +++ b/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 +}