On Oct 18, 2007, at 1:32 AM, Bill Wendling wrote: > Author: void > Date: Thu Oct 18 03:32:37 2007 > New Revision: 43120 > > URL: http://llvm.org/viewvc/llvm-project?rev=43120&view=rev > Log: > Pointer arithmetic should be done with the index the same size as > the pointer.
Nice catch Bill. Should this use sign extend or zero extend if the value is too small? It seems like zext would be more appropriate, -Chris > > Added: > llvm/trunk/test/CodeGen/PowerPC/2007-10-18-PtrArithmetic.ll > Modified: > llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp > > Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ > SelectionDAG/LegalizeDAG.cpp?rev=43120&r1=43119&r2=43120&view=diff > > ====================================================================== > ======== > --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original) > +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu Oct 18 > 03:32:37 2007 > @@ -4134,6 +4134,13 @@ > 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); > > Added: llvm/trunk/test/CodeGen/PowerPC/2007-10-18-PtrArithmetic.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ > PowerPC/2007-10-18-PtrArithmetic.ll?rev=43120&view=auto > > ====================================================================== > ======== > --- llvm/trunk/test/CodeGen/PowerPC/2007-10-18-PtrArithmetic.ll > (added) > +++ llvm/trunk/test/CodeGen/PowerPC/2007-10-18-PtrArithmetic.ll Thu > Oct 18 03:32:37 2007 > @@ -0,0 +1,22 @@ > +; RUN: llvm-as < %s | llc -march=ppc64 -mattr=+altivec > + %struct.inoutprops = type <{ i8, [3 x i8] }> > + > +define void @bork(float* %argA, float* %argB, float* %res, i8 % > inoutspec.0) { > +entry: > + %.mask = and i8 %inoutspec.0, -16 ; <i8> [#uses=1] > + %tmp6 = icmp eq i8 %.mask, 16 ; <i1> [#uses=1] > + br i1 %tmp6, label %cond_true, label %UnifiedReturnBlock > + > +cond_true: ; preds = %entry > + %tmp89 = bitcast float* %res to <4 x i32>* ; <<4 x i32>*> > [#uses=1] > + %tmp1011 = bitcast float* %argA to <4 x i32>* ; <<4 x i32>*> > [#uses=1] > + %tmp14 = load <4 x i32>* %tmp1011, align 16 ; <<4 x i32>> > [#uses=1] > + %tmp1516 = bitcast float* %argB to <4 x i32>* ; <<4 x i32>*> > [#uses=1] > + %tmp18 = load <4 x i32>* %tmp1516, align 16 ; <<4 x i32>> > [#uses=1] > + %tmp19 = sdiv <4 x i32> %tmp14, %tmp18 ; <<4 x i32>> [#uses=1] > + store <4 x i32> %tmp19, <4 x i32>* %tmp89, align 16 > + ret void > + > +UnifiedReturnBlock: ; preds = %entry > + ret void > +} > > > _______________________________________________ > llvm-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
