mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 14:46:53 +00:00
GlobalISel: correctly handle small args via memory.
We were rounding size in bits down rather than up, leading to 0-sized slots for i1 (assert!) and bugs for other types not byte-aligned. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288848 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
42694a3a7e
commit
2c23a5b605
@ -127,7 +127,7 @@ bool CallLowering::handleAssignments(MachineIRBuilder &MIRBuilder,
|
||||
else if (VA.isMemLoc()) {
|
||||
unsigned Size = VA.getValVT() == MVT::iPTR
|
||||
? DL.getPointerSize()
|
||||
: VA.getValVT().getSizeInBits() / 8;
|
||||
: alignTo(VA.getValVT().getSizeInBits(), 8) / 8;
|
||||
unsigned Offset = VA.getLocMemOffset();
|
||||
MachinePointerInfo MPO;
|
||||
unsigned StackAddr = Handler.getStackAddress(Size, Offset, MPO);
|
||||
|
@ -182,3 +182,12 @@ define void @test_call_stack() {
|
||||
call void @test_stack_slots([8 x i64] undef, i64 42, i64 12, i64* null)
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: name: test_mem_i1
|
||||
; CHECK: fixedStack:
|
||||
; CHECK-NEXT: - { id: [[SLOT:[0-9]+]], offset: 0, size: 1, alignment: 16, isImmutable: true, isAliased: false }
|
||||
; CHECK: [[ADDR:%[0-9]+]](p0) = G_FRAME_INDEX %fixed-stack.[[SLOT]]
|
||||
; CHECK: {{%[0-9]+}}(s1) = G_LOAD [[ADDR]](p0) :: (invariant load 1 from %fixed-stack.[[SLOT]], align 0)
|
||||
define void @test_mem_i1([8 x i64], i1 %in) {
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user