Index: lib/CodeGen/SelectionDAG/SelectionDAG.cpp =================================================================== --- lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -4361,18 +4361,11 @@ TargetLowering::ArgListEntry Entry; Entry.Node = Dst; Entry.Ty = IntPtrTy; Args.push_back(Entry); - // Extend or truncate the argument to be an i32 value for the call. - if (Src.getValueType().bitsGT(MVT::i32)) - Src = getNode(ISD::TRUNCATE, dl, MVT::i32, Src); - else - Src = getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Src); Entry.Node = Src; - Entry.Ty = Type::getInt32Ty(*getContext()); - Entry.isSExt = true; + Entry.Ty = Src.getValueType().getTypeForEVT(*getContext()); Args.push_back(Entry); Entry.Node = Size; Entry.Ty = IntPtrTy; - Entry.isSExt = false; Args.push_back(Entry); // FIXME: pass in SDLoc Index: test/CodeGen/MSP430/memset.ll =================================================================== --- /dev/null +++ test/CodeGen/MSP430/memset.ll @@ -0,0 +1,22 @@ +; RUN: llc < %s | FileCheck %s +target datalayout = "e-m:e-p:16:16-i32:16:32-a:16-n8:16" +target triple = "msp430---elf" + +@buf = external global i8* + +; Function Attrs: nounwind +define void @test() nounwind { +entry: +; CHECK-LABEL: test: + %0 = load i8** @buf, align 2 +; CHECK: mov.w &buf, r15 +; CHECK-NEXT: mov.w #5, r14 +; CHECK-NEXT: mov.w #128, r13 +; CHECK-NEXT: call #memset + call void @llvm.memset.p0i8.i16(i8* %0, i8 5, i16 128, i32 1, i1 false) + ret void +} + +; Function Attrs: nounwind +declare void @llvm.memset.p0i8.i16(i8* nocapture, i8, i16, i32, i1) nounwind +