CodeGen: correct memset emittance for WoA

Windows on ARM does not conform to AEABI.  However, memset would be emitted
using the AEABI signature, resulting in inverted parameters.  Handle this
special case appropriately.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207943 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Saleem Abdulrasool 2014-05-04 23:13:21 +00:00
parent 4fc5273a49
commit 8d538f1122
2 changed files with 20 additions and 1 deletions

View File

@ -151,7 +151,8 @@ EmitTargetCodeForMemset(SelectionDAG &DAG, SDLoc dl,
unsigned Align, bool isVolatile,
MachinePointerInfo DstPtrInfo) const {
// Use default for non-AAPCS (or MachO) subtargets
if (!Subtarget->isAAPCS_ABI() || Subtarget->isTargetMachO())
if (!Subtarget->isAAPCS_ABI() || Subtarget->isTargetMachO() ||
Subtarget->isTargetWindows())
return SDValue();
const ARMTargetLowering &TLI =

View File

@ -0,0 +1,18 @@
; RUN: llc -mtriple thumbv7--windows-itanium -filetype asm -o - %s | FileCheck %s
@source = common global [512 x i8] zeroinitializer, align 4
declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
define void @function() {
entry:
call void @llvm.memset.p0i8.i32(i8* bitcast ([512 x i8]* @source to i8*), i8 0, i32 512, i32 0, i1 false)
unreachable
}
; CHECK: movs r1, #0
; CHECK: mov.w r2, #512
; CHECK: movw r0, :lower16:source
; CHECK: movt r0, :upper16:source
; CHECK: memset