[llvm-commits] [llvm] r43270 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll

Chris Lattner clattner at apple.com
Tue Oct 23 16:47:33 PDT 2007


> URL: http://llvm.org/viewvc/llvm-project?rev=43270&view=rev
> Log:
> If there's an unaligned memcpy to/from the stack, don't lower it.  
> Just call the
> memcpy library function instead.

Hey Bill,

There is nothing specific about the stack here, please just make it  
depend on whether the alignment of the src/dest pointers are sufficient.

-Chris

> Added:
>     llvm/trunk/test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ 
> SelectionDAG/SelectionDAGISel.cpp? 
> rev=43270&r1=43269&r2=43270&view=diff
>
> ====================================================================== 
> ========
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  
> (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Tue  
> Oct 23 18:32:40 2007
> @@ -4329,6 +4329,19 @@
>            }
>          }
>
> +        // Check to see if there is an unaligned memcpy from/onto  
> the stack. If
> +        // so, then ignore it for the present.
> +        if (Op1.getOpcode() == ISD::FrameIndex ||
> +            Op2.getOpcode() == ISD::FrameIndex) {
> +          unsigned TotalSize = 0;
> +
> +          for (unsigned i = 0; i < NumMemOps; i++)
> +            TotalSize += MVT::getSizeInBits(MemOps[i]) / 8;
> +
> +          if (TotalSize % Align != 0)
> +            break;
> +        }
> +
>          for (unsigned i = 0; i < NumMemOps; i++) {
>            MVT::ValueType VT = MemOps[i];
>            unsigned VTSize = MVT::getSizeInBits(VT) / 8;
>
> Added: llvm/trunk/test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ 
> PowerPC/2007-10-23-UnalignedMemcpy.ll?rev=43270&view=auto
>
> ====================================================================== 
> ========
> --- llvm/trunk/test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll  
> (added)
> +++ llvm/trunk/test/CodeGen/PowerPC/2007-10-23-UnalignedMemcpy.ll  
> Tue Oct 23 18:32:40 2007
> @@ -0,0 +1,13 @@
> +; RUN: llvm-as < %s | llc -mtriple=powerpc64-apple-darwin9 -o - |  
> grep memcpy
> +
> + at C.0.1173 = external constant [33 x i8]         ; <[33 x i8]*>  
> [#uses=1]
> +
> +define void @Bork() {
> +entry:
> +        %Qux = alloca [33 x i8]         ; <[33 x i8]*> [#uses=1]
> +        %Qux1 = bitcast [33 x i8]* %Qux to i8*          ; <i8*>  
> [#uses=1]
> +        call void @llvm.memcpy.i64( i8* %Qux1, i8* getelementptr  
> ([33 x i8]* @C.0.1173, i32 0, i32 0), i64 33, i32 8 )
> +        ret void
> +}
> +
> +declare void @llvm.memcpy.i64(i8*, i8*, i64, i32)
>
>
> _______________________________________________
> 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