From e40c7b097354974ebd42c7e5d54440b07b57cc33 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 24 Sep 2007 15:54:53 +0000 Subject: [PATCH] Use the correct result value type instead of using getValueType(0) in ExpandEXTRACT_VECTOR_ELT and SplitVectorOp. This fixes an abort in the included testcase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42264 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 7 +++---- test/CodeGen/X86/extractelement-from-arg.ll | 7 +++++++ 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 test/CodeGen/X86/extractelement-from-arg.ll diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 340125e761c..a903011d858 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -3870,8 +3870,7 @@ SDOperand SelectionDAGLegalize::ExpandEXTRACT_VECTOR_ELT(SDOperand Op) { SDOperand Vec = Op.getOperand(0); SDOperand Idx = Op.getOperand(1); - SDNode *InVal = Vec.Val; - MVT::ValueType TVT = InVal->getValueType(0); + MVT::ValueType TVT = Vec.getValueType(); unsigned NumElems = MVT::getVectorNumElements(TVT); switch (TLI.getOperationAction(ISD::EXTRACT_VECTOR_ELT, TVT)) { @@ -5803,10 +5802,10 @@ void SelectionDAGLegalize::SplitVectorOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi) { assert(MVT::isVector(Op.getValueType()) && "Cannot split non-vector type!"); SDNode *Node = Op.Val; - unsigned NumElements = MVT::getVectorNumElements(Node->getValueType(0)); + unsigned NumElements = MVT::getVectorNumElements(Op.getValueType()); assert(NumElements > 1 && "Cannot split a single element vector!"); unsigned NewNumElts = NumElements/2; - MVT::ValueType NewEltVT = MVT::getVectorElementType(Node->getValueType(0)); + MVT::ValueType NewEltVT = MVT::getVectorElementType(Op.getValueType()); MVT::ValueType NewVT = MVT::getVectorType(NewEltVT, NewNumElts); // See if we already split it. diff --git a/test/CodeGen/X86/extractelement-from-arg.ll b/test/CodeGen/X86/extractelement-from-arg.ll new file mode 100644 index 00000000000..d28f016dbae --- /dev/null +++ b/test/CodeGen/X86/extractelement-from-arg.ll @@ -0,0 +1,7 @@ +; RUN: llvm-as %s -o - | llc -march=x86-64 + +define void @test(float* %R, <4 x float> %X) { + %tmp = extractelement <4 x float> %X, i32 3 + store float %tmp, float* %R + ret void +}