mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
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:
parent
4fc5273a49
commit
8d538f1122
@ -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 =
|
||||
|
18
test/CodeGen/ARM/Windows/memset.ll
Normal file
18
test/CodeGen/ARM/Windows/memset.ll
Normal 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
|
||||
|
Loading…
Reference in New Issue
Block a user