Skip to content

Commit dd6c6eb

Browse files
committed
[AMDGPU] New RegBankSelect: Add rules for G_PTRTOINT and G_INTTOPTR
1 parent 62fe5e4 commit dd6c6eb

File tree

3 files changed

+211
-1
lines changed

3 files changed

+211
-1
lines changed

llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,21 @@ RegBankLegalizeRules::RegBankLegalizeRules(const GCNSubtarget &_ST,
718718
.Any({{DivP1}, {{VgprP1}, {VgprP1, Vgpr64}}})
719719
.Any({{DivP0}, {{VgprP0}, {VgprP0, Vgpr64}}});
720720

721-
addRulesForGOpcs({G_INTTOPTR}).Any({{UniP4}, {{SgprP4}, {Sgpr64}}});
721+
addRulesForGOpcs({G_INTTOPTR})
722+
.Any({{UniPtr32}, {{SgprPtr32}, {Sgpr32}}})
723+
.Any({{DivPtr32}, {{VgprPtr32}, {Vgpr32}}})
724+
.Any({{UniPtr64}, {{SgprPtr64}, {Sgpr64}}})
725+
.Any({{DivPtr64}, {{VgprPtr64}, {Vgpr64}}})
726+
.Any({{UniPtr128}, {{SgprPtr128}, {Sgpr128}}})
727+
.Any({{DivPtr128}, {{VgprPtr128}, {Vgpr128}}});
728+
729+
addRulesForGOpcs({G_PTRTOINT})
730+
.Any({{UniS32}, {{Sgpr32}, {SgprPtr32}}})
731+
.Any({{DivS32}, {{Vgpr32}, {VgprPtr32}}})
732+
.Any({{UniS64}, {{Sgpr64}, {SgprPtr64}}})
733+
.Any({{DivS64}, {{Vgpr64}, {VgprPtr64}}})
734+
.Any({{UniS128}, {{Sgpr128}, {SgprPtr128}}})
735+
.Any({{DivS128}, {{Vgpr128}, {VgprPtr128}}});
722736

723737
addRulesForGOpcs({G_ABS}, Standard).Uni(S16, {{Sgpr32Trunc}, {Sgpr32SExt}});
724738

llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-inttoptr.mir

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
# RUN: llc -mtriple=amdgcn -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
33
# RUN: llc -mtriple=amdgcn -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s
44

5+
# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass="amdgpu-regbankselect,amdgpu-regbanklegalize" %s -verify-machineinstrs -o - | FileCheck %s --check-prefix=NEW_RBS
6+
57
---
68
name: inttoptr_s_p0
79
legalized: true
@@ -14,6 +16,12 @@ body: |
1416
; CHECK-NEXT: {{ $}}
1517
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
1618
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p0) = G_INTTOPTR [[COPY]](s64)
19+
;
20+
; NEW_RBS-LABEL: name: inttoptr_s_p0
21+
; NEW_RBS: liveins: $sgpr0_sgpr1
22+
; NEW_RBS-NEXT: {{ $}}
23+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
24+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p0) = G_INTTOPTR [[COPY]](s64)
1725
%0:_(s64) = COPY $sgpr0_sgpr1
1826
%1:_(p0) = G_INTTOPTR %0
1927
...
@@ -30,6 +38,12 @@ body: |
3038
; CHECK-NEXT: {{ $}}
3139
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
3240
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p0) = G_INTTOPTR [[COPY]](s64)
41+
;
42+
; NEW_RBS-LABEL: name: inttoptr_v_p0
43+
; NEW_RBS: liveins: $vgpr0_vgpr1
44+
; NEW_RBS-NEXT: {{ $}}
45+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
46+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p0) = G_INTTOPTR [[COPY]](s64)
3347
%0:_(s64) = COPY $vgpr0_vgpr1
3448
%1:_(p0) = G_INTTOPTR %0
3549
...
@@ -46,6 +60,12 @@ body: |
4660
; CHECK-NEXT: {{ $}}
4761
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
4862
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p1) = G_INTTOPTR [[COPY]](s64)
63+
;
64+
; NEW_RBS-LABEL: name: inttoptr_s_p1
65+
; NEW_RBS: liveins: $sgpr0_sgpr1
66+
; NEW_RBS-NEXT: {{ $}}
67+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
68+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p1) = G_INTTOPTR [[COPY]](s64)
4969
%0:_(s64) = COPY $sgpr0_sgpr1
5070
%1:_(p1) = G_INTTOPTR %0
5171
...
@@ -62,6 +82,12 @@ body: |
6282
; CHECK-NEXT: {{ $}}
6383
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
6484
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p1) = G_INTTOPTR [[COPY]](s64)
85+
;
86+
; NEW_RBS-LABEL: name: inttoptr_v_p1
87+
; NEW_RBS: liveins: $vgpr0_vgpr1
88+
; NEW_RBS-NEXT: {{ $}}
89+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
90+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p1) = G_INTTOPTR [[COPY]](s64)
6591
%0:_(s64) = COPY $vgpr0_vgpr1
6692
%1:_(p1) = G_INTTOPTR %0
6793
...
@@ -78,6 +104,12 @@ body: |
78104
; CHECK-NEXT: {{ $}}
79105
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
80106
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p2) = G_INTTOPTR [[COPY]](s32)
107+
;
108+
; NEW_RBS-LABEL: name: inttoptr_s_p2
109+
; NEW_RBS: liveins: $sgpr0
110+
; NEW_RBS-NEXT: {{ $}}
111+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
112+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p2) = G_INTTOPTR [[COPY]](s32)
81113
%0:_(s32) = COPY $sgpr0
82114
%1:_(p2) = G_INTTOPTR %0
83115
...
@@ -94,6 +126,12 @@ body: |
94126
; CHECK-NEXT: {{ $}}
95127
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
96128
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p2) = G_INTTOPTR [[COPY]](s32)
129+
;
130+
; NEW_RBS-LABEL: name: inttoptr_v_p2
131+
; NEW_RBS: liveins: $vgpr0
132+
; NEW_RBS-NEXT: {{ $}}
133+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
134+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p2) = G_INTTOPTR [[COPY]](s32)
97135
%0:_(s32) = COPY $vgpr0
98136
%1:_(p2) = G_INTTOPTR %0
99137
...
@@ -110,6 +148,12 @@ body: |
110148
; CHECK-NEXT: {{ $}}
111149
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
112150
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p3) = G_INTTOPTR [[COPY]](s32)
151+
;
152+
; NEW_RBS-LABEL: name: inttoptr_s_p3
153+
; NEW_RBS: liveins: $sgpr0
154+
; NEW_RBS-NEXT: {{ $}}
155+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
156+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p3) = G_INTTOPTR [[COPY]](s32)
113157
%0:_(s32) = COPY $sgpr0
114158
%1:_(p3) = G_INTTOPTR %0
115159
...
@@ -126,6 +170,12 @@ body: |
126170
; CHECK-NEXT: {{ $}}
127171
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
128172
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p3) = G_INTTOPTR [[COPY]](s32)
173+
;
174+
; NEW_RBS-LABEL: name: inttoptr_v_p3
175+
; NEW_RBS: liveins: $vgpr0
176+
; NEW_RBS-NEXT: {{ $}}
177+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
178+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p3) = G_INTTOPTR [[COPY]](s32)
129179
%0:_(s32) = COPY $vgpr0
130180
%1:_(p3) = G_INTTOPTR %0
131181
...
@@ -142,6 +192,12 @@ body: |
142192
; CHECK-NEXT: {{ $}}
143193
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
144194
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p4) = G_INTTOPTR [[COPY]](s64)
195+
;
196+
; NEW_RBS-LABEL: name: inttoptr_s_p4
197+
; NEW_RBS: liveins: $sgpr0_sgpr1
198+
; NEW_RBS-NEXT: {{ $}}
199+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
200+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p4) = G_INTTOPTR [[COPY]](s64)
145201
%0:_(s64) = COPY $sgpr0_sgpr1
146202
%1:_(p4) = G_INTTOPTR %0
147203
...
@@ -158,6 +214,12 @@ body: |
158214
; CHECK-NEXT: {{ $}}
159215
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
160216
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p4) = G_INTTOPTR [[COPY]](s64)
217+
;
218+
; NEW_RBS-LABEL: name: inttoptr_v_p4
219+
; NEW_RBS: liveins: $vgpr0_vgpr1
220+
; NEW_RBS-NEXT: {{ $}}
221+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
222+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p4) = G_INTTOPTR [[COPY]](s64)
161223
%0:_(s64) = COPY $vgpr0_vgpr1
162224
%1:_(p4) = G_INTTOPTR %0
163225
...
@@ -174,6 +236,12 @@ body: |
174236
; CHECK-NEXT: {{ $}}
175237
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
176238
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p5) = G_INTTOPTR [[COPY]](s32)
239+
;
240+
; NEW_RBS-LABEL: name: inttoptr_s_p5
241+
; NEW_RBS: liveins: $sgpr0
242+
; NEW_RBS-NEXT: {{ $}}
243+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
244+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p5) = G_INTTOPTR [[COPY]](s32)
177245
%0:_(s32) = COPY $sgpr0
178246
%1:_(p5) = G_INTTOPTR %0
179247
...
@@ -190,6 +258,12 @@ body: |
190258
; CHECK-NEXT: {{ $}}
191259
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
192260
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p5) = G_INTTOPTR [[COPY]](s32)
261+
;
262+
; NEW_RBS-LABEL: name: inttoptr_v_p5
263+
; NEW_RBS: liveins: $vgpr0
264+
; NEW_RBS-NEXT: {{ $}}
265+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
266+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p5) = G_INTTOPTR [[COPY]](s32)
193267
%0:_(s32) = COPY $vgpr0
194268
%1:_(p5) = G_INTTOPTR %0
195269
...
@@ -206,6 +280,12 @@ body: |
206280
; CHECK-NEXT: {{ $}}
207281
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
208282
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p6) = G_INTTOPTR [[COPY]](s32)
283+
;
284+
; NEW_RBS-LABEL: name: inttoptr_s_p6
285+
; NEW_RBS: liveins: $sgpr0
286+
; NEW_RBS-NEXT: {{ $}}
287+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
288+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p6) = G_INTTOPTR [[COPY]](s32)
209289
%0:_(s32) = COPY $sgpr0
210290
%1:_(p6) = G_INTTOPTR %0
211291
...
@@ -222,6 +302,12 @@ body: |
222302
; CHECK-NEXT: {{ $}}
223303
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
224304
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p6) = G_INTTOPTR [[COPY]](s32)
305+
;
306+
; NEW_RBS-LABEL: name: inttoptr_v_p6
307+
; NEW_RBS: liveins: $vgpr0
308+
; NEW_RBS-NEXT: {{ $}}
309+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
310+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p6) = G_INTTOPTR [[COPY]](s32)
225311
%0:_(s32) = COPY $vgpr0
226312
%1:_(p6) = G_INTTOPTR %0
227313
...
@@ -238,6 +324,12 @@ body: |
238324
; CHECK-NEXT: {{ $}}
239325
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s128) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
240326
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p8) = G_INTTOPTR [[COPY]](s128)
327+
;
328+
; NEW_RBS-LABEL: name: inttoptr_s_p8
329+
; NEW_RBS: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
330+
; NEW_RBS-NEXT: {{ $}}
331+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:sgpr(s128) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
332+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:sgpr(p8) = G_INTTOPTR [[COPY]](s128)
241333
%0:_(s128) = COPY $sgpr0_sgpr1_sgpr2_sgpr3
242334
%1:_(p8) = G_INTTOPTR %0
243335
...
@@ -254,6 +346,12 @@ body: |
254346
; CHECK-NEXT: {{ $}}
255347
; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
256348
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p8) = G_INTTOPTR [[COPY]](s128)
349+
;
350+
; NEW_RBS-LABEL: name: inttoptr_v_p8
351+
; NEW_RBS: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
352+
; NEW_RBS-NEXT: {{ $}}
353+
; NEW_RBS-NEXT: [[COPY:%[0-9]+]]:vgpr(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
354+
; NEW_RBS-NEXT: [[INTTOPTR:%[0-9]+]]:vgpr(p8) = G_INTTOPTR [[COPY]](s128)
257355
%0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
258356
%1:_(p8) = G_INTTOPTR %0
259357
...

0 commit comments

Comments
 (0)