From 90bfc2d10520f9621309436c1c6928a59cd33616 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Thu, 18 Oct 2007 08:32:37 +0000 Subject: Pointer arithmetic should be done with the index the same size as the pointer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43120 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib/CodeGen') diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index da2c1dccb5..c111036825 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -4134,6 +4134,13 @@ SDOperand SelectionDAGLegalize::ExpandEXTRACT_VECTOR_ELT(SDOperand Op) { unsigned EltSize = MVT::getSizeInBits(Op.getValueType())/8; Idx = DAG.getNode(ISD::MUL, Idx.getValueType(), Idx, DAG.getConstant(EltSize, Idx.getValueType())); + + if (MVT::getSizeInBits(Idx.getValueType()) > + MVT::getSizeInBits(TLI.getPointerTy())) + Idx = DAG.getNode(ISD::TRUNCATE, TLI.getPointerTy(), StackPtr); + else + Idx = DAG.getNode(ISD::SIGN_EXTEND, TLI.getPointerTy(), StackPtr); + StackPtr = DAG.getNode(ISD::ADD, Idx.getValueType(), Idx, StackPtr); Op = DAG.getLoad(Op.getValueType(), Ch, StackPtr, NULL, 0); -- cgit v1.2.3-70-g09d2