[llvm-commits] [llvm] r105206 - in /llvm/trunk: lib/Transforms/Utils/BuildLibCalls.cpp test/Transforms/SimplifyLibCalls/2010-05-30-memcpy-Struct.ll

Nick Lewycky nicholas at mxc.ca
Sun May 30 23:16:35 PDT 2010


Author: nicholas
Date: Mon May 31 01:16:35 2010
New Revision: 105206

URL: http://llvm.org/viewvc/llvm-project?rev=105206&view=rev
Log:
The memcpy intrinsic only takes i8* for %src and %dst, so cast them to that
first. Fixes PR7265.

Added:
    llvm/trunk/test/Transforms/SimplifyLibCalls/2010-05-30-memcpy-Struct.ll
Modified:
    llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp

Modified: llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp?rev=105206&r1=105205&r2=105206&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp Mon May 31 01:16:35 2010
@@ -112,10 +112,10 @@
 Value *llvm::EmitMemCpy(Value *Dst, Value *Src, Value *Len, unsigned Align,
                         bool isVolatile, IRBuilder<> &B, const TargetData *TD) {
   Module *M = B.GetInsertBlock()->getParent()->getParent();
-  const Type *ArgTys[3] = { Dst->getType(), Src->getType(), Len->getType() };
-  Value *MemCpy = Intrinsic::getDeclaration(M, Intrinsic::memcpy, ArgTys, 3);
   Dst = CastToCStr(Dst, B);
   Src = CastToCStr(Src, B);
+  const Type *ArgTys[3] = { Dst->getType(), Src->getType(), Len->getType() };
+  Value *MemCpy = Intrinsic::getDeclaration(M, Intrinsic::memcpy, ArgTys, 3);
   return B.CreateCall5(MemCpy, Dst, Src, Len,
                        ConstantInt::get(B.getInt32Ty(), Align),
                        ConstantInt::get(B.getInt1Ty(), isVolatile));

Added: llvm/trunk/test/Transforms/SimplifyLibCalls/2010-05-30-memcpy-Struct.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyLibCalls/2010-05-30-memcpy-Struct.ll?rev=105206&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyLibCalls/2010-05-30-memcpy-Struct.ll (added)
+++ llvm/trunk/test/Transforms/SimplifyLibCalls/2010-05-30-memcpy-Struct.ll Mon May 31 01:16:35 2010
@@ -0,0 +1,20 @@
+; RUN: opt -simplify-libcalls %s -S -o - | FileCheck %s
+; PR7265
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-unknown-linux-gnu"
+
+%union.anon = type { i32, [4 x i8] }
+
+ at .str = private constant [3 x i8] c"%s\00"        ; <[3 x i8]*> [#uses=2]
+
+define void @CopyEventArg(%union.anon* %ev) nounwind {
+entry:
+  %call = call i32 (i8*, i8*, ...)* @sprintf(i8* undef, i8* getelementptr inbounds ([3 x i8]* @.str, i64 0, i64 0), %union.anon* %ev) nounwind ; <i32> [#uses=0]
+; CHECK: bitcast %union.anon* %ev to i8*
+; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
+  ret void
+}
+
+declare i32 @sprintf(i8*, i8*, ...)
+





More information about the llvm-commits mailing list