Skip to content

Commit 8adc86a

Browse files
committed
AMDGPU/GlobalISel: Define instruction mapping for G_INSERT
Reviewers: arsenm Reviewed By: arsenm Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, rovka, kristof.beyls, dstuttard, tpr, t-tye, llvm-commits Differential Revision: https://reviews.llvm.org/D49625 llvm-svn: 339491
1 parent f1342bb commit 8adc86a

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ bool AMDGPURegisterBankInfo::isSALUMapping(const MachineInstr &MI) const {
193193
const MachineFunction &MF = *MI.getParent()->getParent();
194194
const MachineRegisterInfo &MRI = MF.getRegInfo();
195195
for (unsigned i = 0, e = MI.getNumOperands();i != e; ++i) {
196+
if (!MI.getOperand(i).isReg())
197+
continue;
196198
unsigned Reg = MI.getOperand(i).getReg();
197199
const RegisterBank *Bank = getRegBank(Reg, MRI, *TRI);
198200
if (Bank && Bank->getID() != AMDGPU::SGPRRegBankID)
@@ -331,6 +333,18 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
331333
OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size);
332334
break;
333335
}
336+
case AMDGPU::G_INSERT: {
337+
unsigned BankID = isSALUMapping(MI) ? AMDGPU::SGPRRegBankID :
338+
AMDGPU::VGPRRegBankID;
339+
unsigned DstSize = getSizeInBits(MI.getOperand(0).getReg(), MRI, *TRI);
340+
unsigned SrcSize = getSizeInBits(MI.getOperand(1).getReg(), MRI, *TRI);
341+
unsigned EltSize = getSizeInBits(MI.getOperand(2).getReg(), MRI, *TRI);
342+
OpdsMapping[0] = AMDGPU::getValueMapping(BankID, DstSize);
343+
OpdsMapping[1] = AMDGPU::getValueMapping(BankID, SrcSize);
344+
OpdsMapping[2] = AMDGPU::getValueMapping(BankID, EltSize);
345+
OpdsMapping[3] = nullptr;
346+
break;
347+
}
334348
case AMDGPU::G_EXTRACT: {
335349
unsigned BankID = getRegBankID(MI.getOperand(1).getReg(), MRI, *TRI);
336350
unsigned DstSize = getSizeInBits(MI.getOperand(0).getReg(), MRI, *TRI);
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -march=amdgcn -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
3+
# RUN: llc -march=amdgcn -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s
4+
5+
---
6+
name: insert_lo32_i64_ss
7+
legalized: true
8+
9+
body: |
10+
bb.0:
11+
liveins: $sgpr0_sgpr1, $sgpr2
12+
; CHECK-LABEL: name: insert_lo32_i64_ss
13+
; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
14+
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
15+
; CHECK: [[INSERT:%[0-9]+]]:sgpr(s64) = G_INSERT [[COPY]], [[COPY1]](s32), 0
16+
%0:_(s64) = COPY $sgpr0_sgpr1
17+
%1:_(s32) = COPY $sgpr2
18+
%2:_(s64) = G_INSERT %0, %1, 0
19+
...
20+
21+
---
22+
name: insert_lo32_i64_sv
23+
legalized: true
24+
25+
body: |
26+
bb.0:
27+
liveins: $sgpr0_sgpr1, $vgpr2
28+
; CHECK-LABEL: name: insert_lo32_i64_sv
29+
; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
30+
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
31+
; CHECK: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
32+
; CHECK: [[INSERT:%[0-9]+]]:vgpr(s64) = G_INSERT [[COPY2]], [[COPY1]](s32), 0
33+
%0:_(s64) = COPY $sgpr0_sgpr1
34+
%1:_(s32) = COPY $vgpr2
35+
%2:_(s64) = G_INSERT %0, %1, 0
36+
...
37+
---
38+
name: insert_lo32_i64_vs
39+
legalized: true
40+
41+
body: |
42+
bb.0:
43+
liveins: $vgpr0_vgpr1, $sgpr2
44+
; CHECK-LABEL: name: insert_lo32_i64_vs
45+
; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
46+
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
47+
; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
48+
; CHECK: [[INSERT:%[0-9]+]]:vgpr(s64) = G_INSERT [[COPY]], [[COPY2]](s32), 0
49+
%0:_(s64) = COPY $vgpr0_vgpr1
50+
%1:_(s32) = COPY $sgpr2
51+
%2:_(s64) = G_INSERT %0, %1, 0
52+
...
53+
---
54+
name: insert_lo32_i64_vv
55+
legalized: true
56+
57+
body: |
58+
bb.0:
59+
liveins: $vgpr0_vgpr1, $vgpr2
60+
; CHECK-LABEL: name: insert_lo32_i64_vv
61+
; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
62+
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
63+
; CHECK: [[INSERT:%[0-9]+]]:sgpr(s64) = G_INSERT [[COPY]], [[COPY1]](s32), 0
64+
%0:_(s64) = COPY $sgpr0_sgpr1
65+
%1:_(s32) = COPY $sgpr2
66+
%2:_(s64) = G_INSERT %0, %1, 0
67+
...
68+
69+
---
70+
name: insert_lo32_i96_v
71+
legalized: true
72+
73+
body: |
74+
bb.0:
75+
liveins: $vgpr0_vgpr1_vgpr2, $vgpr3
76+
; CHECK-LABEL: name: insert_lo32_i96_v
77+
; CHECK: [[COPY:%[0-9]+]]:vgpr(s96) = COPY $vgpr0_vgpr1_vgpr2
78+
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
79+
; CHECK: [[INSERT:%[0-9]+]]:vgpr(s96) = G_INSERT [[COPY]], [[COPY1]](s32), 0
80+
%0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
81+
%1:_(s32) = COPY $vgpr3
82+
%2:_(s96) = G_INSERT %0, %1, 0
83+
...

0 commit comments

Comments
 (0)