[llvm-commits] [llvm] r43120 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp test/CodeGen/PowerPC/2007-10-18-PtrArithmetic.ll

Chris Lattner clattner at apple.com
Thu Oct 18 08:50:03 PDT 2007


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
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list