diff options
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 4 | ||||
-rw-r--r-- | test/CodeGen/X86/memset64-on-x86-32.ll | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 38e6342ae6..d8eaee71c8 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 0000000000..7045c0faf0 --- /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 + |