Skip to content

Commit da9f908

Browse files
authored
[RISCV][GlobalISel] Legalize G_FRAME_INDEX (#67746)
G_FRAME_INDEX is legal for pointers.
1 parent 982639f commit da9f908

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST) {
169169

170170
getActionDefinitionsBuilder(G_ABS).lower();
171171

172+
getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
173+
172174
getLegacyLegalizerInfo().computeTables();
173175
}
174176

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3+
# RUN: | FileCheck %s
4+
--- |
5+
6+
define ptr @alloca32() {
7+
entry:
8+
%ptr0 = alloca i32, align 4
9+
ret ptr %ptr0
10+
}
11+
12+
...
13+
---
14+
name: alloca32
15+
stack:
16+
- { id: 0, name: ptr0, type: default, offset: 0, size: 4, alignment: 4,
17+
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
18+
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
19+
body: |
20+
bb.1.entry:
21+
; CHECK-LABEL: name: alloca32
22+
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.ptr0
23+
; CHECK-NEXT: $x10 = COPY [[FRAME_INDEX]](p0)
24+
; CHECK-NEXT: PseudoRET implicit $x10
25+
%0:_(p0) = G_FRAME_INDEX %stack.0.ptr0
26+
$x10 = COPY %0(p0)
27+
PseudoRET implicit $x10
28+
29+
...
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3+
# RUN: | FileCheck %s
4+
--- |
5+
6+
define ptr @alloca64() {
7+
entry:
8+
%ptr0 = alloca i64, align 4
9+
ret ptr %ptr0
10+
}
11+
12+
...
13+
---
14+
name: alloca64
15+
stack:
16+
- { id: 0, name: ptr0, type: default, offset: 0, size: 4, alignment: 4,
17+
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
18+
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
19+
body: |
20+
bb.1.entry:
21+
; CHECK-LABEL: name: alloca64
22+
; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.ptr0
23+
; CHECK-NEXT: $x10 = COPY [[FRAME_INDEX]](p0)
24+
; CHECK-NEXT: PseudoRET implicit $x10
25+
%0:_(p0) = G_FRAME_INDEX %stack.0.ptr0
26+
$x10 = COPY %0(p0)
27+
PseudoRET implicit $x10
28+
29+
...

0 commit comments

Comments
 (0)