Skip to content

Commit f811338

Browse files
committed
AMDGPU: Fold frame indexes into s_or_b32
Some pointer adds get turned into ors, and sometimes and is performed on pointers for masking.
1 parent cbd4965 commit f811338

File tree

2 files changed

+32
-35
lines changed

2 files changed

+32
-35
lines changed

llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2803,7 +2803,8 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI,
28032803
}
28042804
case AMDGPU::S_ADD_I32:
28052805
case AMDGPU::S_ADD_U32: {
2806-
// TODO: Handle s_or_b32, s_and_b32.
2806+
case AMDGPU::S_OR_B32: {
2807+
// TODO: Handle s_and_b32 for ptrmask
28072808
unsigned OtherOpIdx = FIOperandNum == 1 ? 2 : 1;
28082809
MachineOperand &OtherOp = MI->getOperand(OtherOpIdx);
28092810

llvm/test/CodeGen/AMDGPU/eliminate-frame-index-scalar-bit-ops.mir

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ machineFunctionInfo:
2121
body: |
2222
bb.0:
2323
; MUBUFW64-LABEL: name: s_or_b32__inline_imm__fi_offset0
24-
; MUBUFW64: $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
25-
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 12, killed $sgpr4, implicit-def $scc
24+
; MUBUFW64: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
25+
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 12, $sgpr4, implicit-def $scc
2626
; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
2727
;
2828
; MUBUFW32-LABEL: name: s_or_b32__inline_imm__fi_offset0
29-
; MUBUFW32: $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
30-
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 12, killed $sgpr4, implicit-def $scc
29+
; MUBUFW32: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
30+
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 12, $sgpr4, implicit-def $scc
3131
; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
3232
;
3333
; FLATSCRW64-LABEL: name: s_or_b32__inline_imm__fi_offset0
@@ -55,25 +55,21 @@ machineFunctionInfo:
5555
body: |
5656
bb.0:
5757
; MUBUFW64-LABEL: name: s_or_b32__literal__fi_offset96
58-
; MUBUFW64: $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def $scc
59-
; MUBUFW64-NEXT: $sgpr4 = S_ADD_I32 killed $sgpr4, 96, implicit-def $scc
60-
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 68, killed $sgpr4, implicit-def $scc
58+
; MUBUFW64: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
59+
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 164, $sgpr4, implicit-def $scc
6160
; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
6261
;
6362
; MUBUFW32-LABEL: name: s_or_b32__literal__fi_offset96
64-
; MUBUFW32: $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def $scc
65-
; MUBUFW32-NEXT: $sgpr4 = S_ADD_I32 killed $sgpr4, 96, implicit-def $scc
66-
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 68, killed $sgpr4, implicit-def $scc
63+
; MUBUFW32: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
64+
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 164, $sgpr4, implicit-def $scc
6765
; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
6866
;
6967
; FLATSCRW64-LABEL: name: s_or_b32__literal__fi_offset96
70-
; FLATSCRW64: $sgpr4 = S_ADD_I32 $sgpr32, 96, implicit-def $scc
71-
; FLATSCRW64-NEXT: renamable $sgpr7 = S_OR_B32 68, killed $sgpr4, implicit-def $scc
68+
; FLATSCRW64: renamable $sgpr7 = S_OR_B32 164, $sgpr32, implicit-def $scc
7269
; FLATSCRW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
7370
;
7471
; FLATSCRW32-LABEL: name: s_or_b32__literal__fi_offset96
75-
; FLATSCRW32: $sgpr4 = S_ADD_I32 $sgpr32, 96, implicit-def $scc
76-
; FLATSCRW32-NEXT: renamable $sgpr7 = S_OR_B32 68, killed $sgpr4, implicit-def $scc
72+
; FLATSCRW32: renamable $sgpr7 = S_OR_B32 164, $sgpr32, implicit-def $scc
7773
; FLATSCRW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
7874
renamable $sgpr7 = S_OR_B32 68, %stack.1, implicit-def $scc
7975
SI_RETURN implicit $sgpr7, implicit $scc
@@ -96,31 +92,31 @@ body: |
9692
; MUBUFW64-LABEL: name: s_or_b32__sgpr__fi_literal_offset
9793
; MUBUFW64: liveins: $sgpr8
9894
; MUBUFW64-NEXT: {{ $}}
99-
; MUBUFW64-NEXT: $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def $scc
100-
; MUBUFW64-NEXT: $sgpr4 = S_ADD_I32 killed $sgpr4, 80, implicit-def $scc
101-
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
95+
; MUBUFW64-NEXT: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
96+
; MUBUFW64-NEXT: renamable $sgpr7 = S_ADD_I32 killed $sgpr4, $sgpr8, implicit-def $scc
97+
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr7, 80, implicit-def $scc
10298
; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
10399
;
104100
; MUBUFW32-LABEL: name: s_or_b32__sgpr__fi_literal_offset
105101
; MUBUFW32: liveins: $sgpr8
106102
; MUBUFW32-NEXT: {{ $}}
107-
; MUBUFW32-NEXT: $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def $scc
108-
; MUBUFW32-NEXT: $sgpr4 = S_ADD_I32 killed $sgpr4, 80, implicit-def $scc
109-
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
103+
; MUBUFW32-NEXT: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
104+
; MUBUFW32-NEXT: renamable $sgpr7 = S_ADD_I32 killed $sgpr4, $sgpr8, implicit-def $scc
105+
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr7, 80, implicit-def $scc
110106
; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
111107
;
112108
; FLATSCRW64-LABEL: name: s_or_b32__sgpr__fi_literal_offset
113109
; FLATSCRW64: liveins: $sgpr8
114110
; FLATSCRW64-NEXT: {{ $}}
115-
; FLATSCRW64-NEXT: $sgpr4 = S_ADD_I32 $sgpr32, 80, implicit-def $scc
116-
; FLATSCRW64-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
111+
; FLATSCRW64-NEXT: renamable $sgpr4 = S_ADD_I32 killed $sgpr32, $sgpr8, implicit-def $scc
112+
; FLATSCRW64-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr4, 80, implicit-def $scc
117113
; FLATSCRW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
118114
;
119115
; FLATSCRW32-LABEL: name: s_or_b32__sgpr__fi_literal_offset
120116
; FLATSCRW32: liveins: $sgpr8
121117
; FLATSCRW32-NEXT: {{ $}}
122-
; FLATSCRW32-NEXT: $sgpr4 = S_ADD_I32 $sgpr32, 80, implicit-def $scc
123-
; FLATSCRW32-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
118+
; FLATSCRW32-NEXT: renamable $sgpr4 = S_ADD_I32 killed $sgpr32, $sgpr8, implicit-def $scc
119+
; FLATSCRW32-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr4, 80, implicit-def $scc
124120
; FLATSCRW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
125121
renamable $sgpr7 = S_OR_B32 $sgpr8, %stack.1, implicit-def $scc
126122
SI_RETURN implicit $sgpr7, implicit $scc
@@ -143,31 +139,31 @@ body: |
143139
; MUBUFW64-LABEL: name: s_or_b32__sgpr__fi_inlineimm_offset
144140
; MUBUFW64: liveins: $sgpr8
145141
; MUBUFW64-NEXT: {{ $}}
146-
; MUBUFW64-NEXT: $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def $scc
147-
; MUBUFW64-NEXT: $sgpr4 = S_ADD_I32 killed $sgpr4, 32, implicit-def $scc
148-
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
142+
; MUBUFW64-NEXT: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 6, implicit-def dead $scc
143+
; MUBUFW64-NEXT: renamable $sgpr7 = S_ADD_I32 killed $sgpr4, $sgpr8, implicit-def $scc
144+
; MUBUFW64-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr7, 32, implicit-def $scc
149145
; MUBUFW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
150146
;
151147
; MUBUFW32-LABEL: name: s_or_b32__sgpr__fi_inlineimm_offset
152148
; MUBUFW32: liveins: $sgpr8
153149
; MUBUFW32-NEXT: {{ $}}
154-
; MUBUFW32-NEXT: $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def $scc
155-
; MUBUFW32-NEXT: $sgpr4 = S_ADD_I32 killed $sgpr4, 32, implicit-def $scc
156-
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
150+
; MUBUFW32-NEXT: renamable $sgpr4 = S_LSHR_B32 $sgpr32, 5, implicit-def dead $scc
151+
; MUBUFW32-NEXT: renamable $sgpr7 = S_ADD_I32 killed $sgpr4, $sgpr8, implicit-def $scc
152+
; MUBUFW32-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr7, 32, implicit-def $scc
157153
; MUBUFW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
158154
;
159155
; FLATSCRW64-LABEL: name: s_or_b32__sgpr__fi_inlineimm_offset
160156
; FLATSCRW64: liveins: $sgpr8
161157
; FLATSCRW64-NEXT: {{ $}}
162-
; FLATSCRW64-NEXT: $sgpr4 = S_ADD_I32 $sgpr32, 32, implicit-def $scc
163-
; FLATSCRW64-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
158+
; FLATSCRW64-NEXT: renamable $sgpr4 = S_ADD_I32 killed $sgpr32, $sgpr8, implicit-def $scc
159+
; FLATSCRW64-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr4, 32, implicit-def $scc
164160
; FLATSCRW64-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
165161
;
166162
; FLATSCRW32-LABEL: name: s_or_b32__sgpr__fi_inlineimm_offset
167163
; FLATSCRW32: liveins: $sgpr8
168164
; FLATSCRW32-NEXT: {{ $}}
169-
; FLATSCRW32-NEXT: $sgpr4 = S_ADD_I32 $sgpr32, 32, implicit-def $scc
170-
; FLATSCRW32-NEXT: renamable $sgpr7 = S_OR_B32 $sgpr8, killed $sgpr4, implicit-def $scc
165+
; FLATSCRW32-NEXT: renamable $sgpr4 = S_ADD_I32 killed $sgpr32, $sgpr8, implicit-def $scc
166+
; FLATSCRW32-NEXT: renamable $sgpr7 = S_OR_B32 killed renamable $sgpr4, 32, implicit-def $scc
171167
; FLATSCRW32-NEXT: SI_RETURN implicit $sgpr7, implicit $scc
172168
renamable $sgpr7 = S_OR_B32 $sgpr8, %stack.1, implicit-def $scc
173169
SI_RETURN implicit $sgpr7, implicit $scc

0 commit comments

Comments
 (0)