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
This commit is contained in:
Dan Gohman 2008-04-16 01:32:32 +00:00
parent d94950c473
commit bcda285fcc
2 changed files with 15 additions and 2 deletions

View File

@ -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);
}

View File

@ -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