From: Dan Gohman Date: Wed, 16 Apr 2008 01:32:32 +0000 (+0000) Subject: Recreate the size SDNode instead of reusing the old one in the x86 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=bcda285fcc98129ce48c4eda72a7f3595c7685ec;p=oota-llvm.git Recreate the size SDNode instead of reusing the old one in the x86 memcpy lowering code; this ensures that the size node has the desired result type. This fixes a regression from r49572 with @llvm.memcpy.i64 on x86-32. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49761 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 38e6342ae65..d8eaee71c89 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -4731,7 +4731,7 @@ X86TargetLowering::EmitTargetCodeForMemset(SelectionDAG &DAG, default: // Byte aligned AVT = MVT::i8; ValReg = X86::AL; - Count = Size; + Count = DAG.getIntPtrConstant(SizeVal); break; } @@ -4746,7 +4746,7 @@ X86TargetLowering::EmitTargetCodeForMemset(SelectionDAG &DAG, InFlag = Chain.getValue(1); } else { AVT = MVT::i8; - Count = Size; + Count = DAG.getIntPtrConstant(SizeVal); Chain = DAG.getCopyToReg(Chain, X86::AL, Src, InFlag); InFlag = Chain.getValue(1); } diff --git a/test/CodeGen/X86/memset64-on-x86-32.ll b/test/CodeGen/X86/memset64-on-x86-32.ll new file mode 100644 index 00000000000..7045c0faf0b --- /dev/null +++ b/test/CodeGen/X86/memset64-on-x86-32.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep stosb + +target triple = "i386-apple-darwin9" + %struct.S = type { [80 x i8] } + +define %struct.S* @bork() { +entry: + call void @llvm.memset.i64( i8* null, i8 0, i64 80, i32 1 ) + ret %struct.S* null +} + +declare void @llvm.memset.i64(i8*, i8, i64, i32) nounwind +