Skip to content

Commit ac7697d

Browse files
!fixup fix MMO and remove observer call
1 parent d1f8967 commit ac7697d

File tree

3 files changed

+64
-42
lines changed

3 files changed

+64
-42
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7882,9 +7882,8 @@ LegalizerHelper::LegalizeResult LegalizerHelper::lowerVAArg(MachineInstr &MI) {
78827882
// LstPtr is a pointer to the head of the list. Get the address
78837883
// of the head of the list.
78847884
Align PtrAlignment = DL.getABITypeAlign(getTypeForLLT(PtrTy, Ctx));
7885-
MachineMemOperand *PtrLoadMMO =
7886-
MF.getMachineMemOperand(MachinePointerInfo::getUnknownStack(MF),
7887-
MachineMemOperand::MOLoad, PtrTy, PtrAlignment);
7885+
MachineMemOperand *PtrLoadMMO = MF.getMachineMemOperand(
7886+
MachinePointerInfo(), MachineMemOperand::MOLoad, PtrTy, PtrAlignment);
78887887
auto VAList = MIRBuilder.buildLoad(PtrTy, ListPtr, *PtrLoadMMO).getReg(0);
78897888

78907889
const Align A(MI.getOperand(2).getImm());
@@ -7907,18 +7906,15 @@ LegalizerHelper::LegalizeResult LegalizerHelper::lowerVAArg(MachineInstr &MI) {
79077906
auto Succ = MIRBuilder.buildPtrAdd(PtrTy, VAList, IncAmt);
79087907

79097908
// Store the increment VAList to the legalized pointer
7910-
MachineMemOperand *StoreMMO =
7911-
MF.getMachineMemOperand(MachinePointerInfo::getUnknownStack(MF),
7912-
MachineMemOperand::MOStore, PtrTy, PtrAlignment);
7909+
MachineMemOperand *StoreMMO = MF.getMachineMemOperand(
7910+
MachinePointerInfo(), MachineMemOperand::MOStore, PtrTy, PtrAlignment);
79137911
MIRBuilder.buildStore(Succ, ListPtr, *StoreMMO);
79147912
// Load the actual argument out of the pointer VAList
79157913
Align EltAlignment = DL.getABITypeAlign(getTypeForLLT(Ty, Ctx));
7916-
MachineMemOperand *EltLoadMMO =
7917-
MF.getMachineMemOperand(MachinePointerInfo::getUnknownStack(MF),
7918-
MachineMemOperand::MOLoad, Ty, EltAlignment);
7914+
MachineMemOperand *EltLoadMMO = MF.getMachineMemOperand(
7915+
MachinePointerInfo(), MachineMemOperand::MOLoad, Ty, EltAlignment);
79197916
MIRBuilder.buildLoad(Dst, VAList, *EltLoadMMO);
79207917

7921-
Observer.erasingInstr(MI);
79227918
MI.eraseFromParent();
79237919
return Legalized;
79247920
}

llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-vaarg-rv32.mir

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,36 @@
55
# greater than 1, so we will always generate code to adjust for this alignment.
66

77
--- |
8-
define void @va_arg_i32() {
8+
define void @va_arg_i32(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ...) {
99
%va = alloca ptr, align 4
10-
%1 = va_arg ptr %va, i32
10+
%p = va_arg ptr %va, i32
1111
ret void
1212
}
13-
define void @va_arg_ptr() {
13+
define void @va_arg_ptr(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ...) {
1414
%va = alloca ptr, align 4
15-
%1 = va_arg ptr %va, ptr
15+
%p = va_arg ptr %va, ptr
1616
ret void
1717
}
1818
...
1919
---
2020
name: va_arg_i32
2121
legalized: false
2222
tracksRegLiveness: true
23+
fixedStack:
24+
- { id: 0, type: default, offset: 0, size: 4, alignment: 16,
25+
isImmutable: true, isAliased: false }
2326
stack:
24-
- { id: 0, name: va, type: default, offset: 0, size: 4, alignment: 4,
25-
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
26-
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
27+
- { id: 0, name: va, type: default, offset: 0, size: 4, alignment: 4 }
28+
machineFunctionInfo:
29+
varArgsFrameIndex: -1
30+
varArgsSaveSize: 0
2731
body: |
28-
bb.1 (%ir-block.0):
32+
bb.1 (%ir-block.8):
33+
liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
2934
; CHECK-LABEL: name: va_arg_i32
30-
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
35+
; CHECK: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
36+
; CHECK-NEXT: {{ $}}
37+
; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
3138
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0))
3239
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
3340
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[LOAD]], [[C]](s32)
@@ -45,14 +52,21 @@ body: |
4552
name: va_arg_ptr
4653
legalized: false
4754
tracksRegLiveness: true
55+
fixedStack:
56+
- { id: 0, type: default, offset: 0, size: 4, alignment: 16,
57+
isImmutable: true, isAliased: false }
4858
stack:
49-
- { id: 0, name: va, type: default, offset: 0, size: 4, alignment: 4,
50-
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
51-
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
59+
- { id: 0, name: va, type: default, offset: 0, size: 4, alignment: 4 }
60+
machineFunctionInfo:
61+
varArgsFrameIndex: -1
62+
varArgsSaveSize: 0
5263
body: |
53-
bb.1 (%ir-block.0):
64+
bb.1 (%ir-block.8):
65+
liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
5466
; CHECK-LABEL: name: va_arg_ptr
55-
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
67+
; CHECK: liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17
68+
; CHECK-NEXT: {{ $}}
69+
; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
5670
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0))
5771
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
5872
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[LOAD]], [[C]](s32)

llvm/test/CodeGen/RISCV/GlobalISel/legalizer/legalize-vaarg-rv64.mir

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,36 @@
55
# greater than 1, so we will always generate code to adjust for this alignment.
66

77
--- |
8-
define void @va_arg_i32() {
8+
define void @va_arg_i32(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ...) {
99
%va = alloca ptr, align 8
10-
%1 = va_arg ptr %va, i32
10+
%p = va_arg ptr %va, i32
1111
ret void
1212
}
13-
define void @va_arg_i64() {
13+
define void @va_arg_i64(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ...) {
1414
%va = alloca ptr, align 8
15-
%1 = va_arg ptr %va, i32
15+
%p = va_arg ptr %va, i32
1616
ret void
1717
}
18-
define void @va_arg_ptr() {
18+
define void @va_arg_ptr(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ...) {
1919
%va = alloca ptr, align 8
20-
%1 = va_arg ptr %va, ptr
20+
%p = va_arg ptr %va, ptr
2121
ret void
2222
}
2323
...
2424
---
2525
name: va_arg_i32
2626
legalized: false
2727
tracksRegLiveness: true
28+
fixedStack:
29+
- { id: 0, type: default, offset: 0, size: 8, alignment: 16,
30+
isImmutable: true, isAliased: false }
2831
stack:
29-
- { id: 0, name: va, type: default, offset: 0, size: 8, alignment: 4,
30-
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
31-
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
32+
- { id: 0, name: va, type: default, offset: 0, size: 8, alignment: 8 }
33+
machineFunctionInfo:
34+
varArgsFrameIndex: -1
35+
varArgsSaveSize: 0
3236
body: |
33-
bb.1 (%ir-block.0):
37+
bb.1 (%ir-block.8):
3438
; CHECK-LABEL: name: va_arg_i32
3539
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
3640
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0))
@@ -50,12 +54,16 @@ body: |
5054
name: va_arg_i64
5155
legalized: false
5256
tracksRegLiveness: true
57+
fixedStack:
58+
- { id: 0, type: default, offset: 0, size: 8, alignment: 16,
59+
isImmutable: true, isAliased: false }
5360
stack:
54-
- { id: 0, name: va, type: default, offset: 0, size: 8, alignment: 4,
55-
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
56-
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
61+
- { id: 0, name: va, type: default, offset: 0, size: 8, alignment: 8 }
62+
machineFunctionInfo:
63+
varArgsFrameIndex: -1
64+
varArgsSaveSize: 0
5765
body: |
58-
bb.1 (%ir-block.0):
66+
bb.1 (%ir-block.8):
5967
; CHECK-LABEL: name: va_arg_i64
6068
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
6169
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0))
@@ -75,12 +83,16 @@ body: |
7583
name: va_arg_ptr
7684
legalized: false
7785
tracksRegLiveness: true
86+
fixedStack:
87+
- { id: 0, type: default, offset: 0, size: 8, alignment: 16,
88+
isImmutable: true, isAliased: false }
7889
stack:
79-
- { id: 0, name: va, type: default, offset: 0, size: 8, alignment: 4,
80-
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
81-
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
90+
- { id: 0, name: va, type: default, offset: 0, size: 8, alignment: 8 }
91+
machineFunctionInfo:
92+
varArgsFrameIndex: -1
93+
varArgsSaveSize: 0
8294
body: |
83-
bb.1 (%ir-block.0):
95+
bb.1 (%ir-block.8):
8496
; CHECK-LABEL: name: va_arg_ptr
8597
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.va
8698
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (load (p0))

0 commit comments

Comments
 (0)