Skip to content

Commit 1a76402

Browse files
committed
AMDGPU: Add baseline test for frame index folding
We currently can increse the instruction count when a frame index requires materialization.
1 parent 32ffc9f commit 1a76402

File tree

2 files changed

+441
-0
lines changed

2 files changed

+441
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck %s
3+
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck %s
4+
5+
---
6+
name: fold_frame_index__v_add_u32_e32__const_v_fi
7+
tracksRegLiveness: true
8+
frameInfo:
9+
maxAlignment: 4
10+
localFrameSize: 16384
11+
stack:
12+
- { id: 0, size: 16384, alignment: 4, local-offset: 0 }
13+
body: |
14+
bb.0:
15+
; CHECK-LABEL: name: fold_frame_index__v_add_u32_e32__const_v_fi
16+
; CHECK: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
17+
; CHECK-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, [[V_MOV_B32_e32_]], implicit $exec
18+
; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_U32_e32_]]
19+
; CHECK-NEXT: SI_RETURN implicit $vgpr0
20+
%0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
21+
%1:vgpr_32 = V_ADD_U32_e32 128, %0, implicit $exec
22+
$vgpr0 = COPY %1
23+
SI_RETURN implicit $vgpr0
24+
...
25+
26+
---
27+
name: fold_frame_index__v_add_co_u32_e64__v_fi_const
28+
tracksRegLiveness: true
29+
frameInfo:
30+
maxAlignment: 4
31+
localFrameSize: 16384
32+
stack:
33+
- { id: 0, size: 16384, alignment: 4, local-offset: 0 }
34+
body: |
35+
bb.0:
36+
; CHECK-LABEL: name: fold_frame_index__v_add_co_u32_e64__v_fi_const
37+
; CHECK: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
38+
; CHECK-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32 = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], 128, 0, implicit $exec
39+
; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_CO_U32_e64_]]
40+
; CHECK-NEXT: SI_RETURN implicit $vgpr0
41+
%0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
42+
%1:vgpr_32, %2:sreg_32 = V_ADD_CO_U32_e64 %0, 128, 0, implicit $exec
43+
$vgpr0 = COPY %1
44+
SI_RETURN implicit $vgpr0
45+
...
46+
47+
---
48+
name: fold_frame_index__v_add_co_u32_e64___fi_const_v
49+
tracksRegLiveness: true
50+
frameInfo:
51+
maxAlignment: 4
52+
localFrameSize: 16384
53+
stack:
54+
- { id: 0, size: 16384, alignment: 4, local-offset: 0 }
55+
body: |
56+
bb.0:
57+
; CHECK-LABEL: name: fold_frame_index__v_add_co_u32_e64___fi_const_v
58+
; CHECK: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
59+
; CHECK-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32 = V_ADD_CO_U32_e64 128, [[V_MOV_B32_e32_]], 0, implicit $exec
60+
; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_CO_U32_e64_]]
61+
; CHECK-NEXT: SI_RETURN implicit $vgpr0
62+
%0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
63+
%1:vgpr_32, %2:sreg_32 = V_ADD_CO_U32_e64 128, %0, 0, implicit $exec
64+
$vgpr0 = COPY %1
65+
SI_RETURN implicit $vgpr0
66+
...
67+
68+
---
69+
name: fold_frame_index__v_add_co_u32_e64__v_fi_imm
70+
tracksRegLiveness: true
71+
frameInfo:
72+
maxAlignment: 4
73+
localFrameSize: 16384
74+
stack:
75+
- { id: 0, size: 16384, alignment: 4, local-offset: 0 }
76+
body: |
77+
bb.0:
78+
; CHECK-LABEL: name: fold_frame_index__v_add_co_u32_e64__v_fi_imm
79+
; CHECK: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32 = V_ADD_CO_U32_e64 %stack.0, 64, 0, implicit $exec
80+
; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_CO_U32_e64_]]
81+
; CHECK-NEXT: SI_RETURN implicit $vgpr0
82+
%0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec
83+
%1:vgpr_32, %2:sreg_32 = V_ADD_CO_U32_e64 %0, 64, 0, implicit $exec
84+
$vgpr0 = COPY %1
85+
SI_RETURN implicit $vgpr0
86+
...
87+

0 commit comments

Comments
 (0)