Skip to content

Commit 962c2a6

Browse files
committed
AMDGPU/GlobalISel: Implement select for 32-bit G_ADD
Reviewers: arsenm Reviewed By: arsenm Subscribers: hiraditya, kzhuravl, jvesely, wdng, nhaehnle, yaxunl, rovka, kristof.beyls, dstuttard, tpr, t-tye, Petar.Avramovic, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58804 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364797 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent ec01b29 commit 962c2a6

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

lib/Target/AMDGPU/AMDGPUGISel.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ multiclass GISelVop2IntrPat <
128128
def : GISelSop2Pat <or, S_OR_B32, i32>;
129129
def : GISelVop2Pat <or, V_OR_B32_e32, i32>;
130130

131+
def : GISelSop2Pat <add, S_ADD_I32, i32>;
132+
def : GISelVop2Pat <add, V_ADD_I32_e32, i32>;
133+
131134
def : GISelSop2Pat <sra, S_ASHR_I32, i32>;
132135
let AddedComplexity = 100 in {
133136
let SubtargetPredicate = isGFX6GFX7 in {

lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,10 +1056,12 @@ bool AMDGPUInstructionSelector::select(MachineInstr &I,
10561056
}
10571057

10581058
switch (I.getOpcode()) {
1059+
case TargetOpcode::G_ADD:
1060+
if (selectG_ADD(I))
1061+
return true;
1062+
LLVM_FALLTHROUGH;
10591063
default:
10601064
return selectImpl(I, CoverageInfo);
1061-
case TargetOpcode::G_ADD:
1062-
return selectG_ADD(I);
10631065
case TargetOpcode::G_INTTOPTR:
10641066
case TargetOpcode::G_BITCAST:
10651067
return selectCOPY(I);
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -march=amdgcn -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefixes=GCN
3+
4+
---
5+
name: add_i32
6+
legalized: true
7+
regBankSelected: true
8+
9+
body: |
10+
bb.0:
11+
liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr3_vgpr4
12+
; GCN-LABEL: name: add_i32
13+
; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
14+
; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
15+
; GCN: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0
16+
; GCN: [[COPY3:%[0-9]+]]:vreg_64 = COPY $vgpr3_vgpr4
17+
; GCN: [[S_ADD_I32_:%[0-9]+]]:sreg_32_xm0 = S_ADD_I32 [[COPY]], [[COPY1]], implicit-def $scc
18+
; GCN: [[V_ADD_I32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_I32_e32 [[S_ADD_I32_]], [[COPY2]], implicit-def $vcc, implicit $exec
19+
; GCN: [[V_ADD_I32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_I32_e32 [[S_ADD_I32_]], [[V_ADD_I32_e32_]], implicit-def $vcc, implicit $exec
20+
; GCN: [[V_ADD_I32_e32_2:%[0-9]+]]:vgpr_32 = V_ADD_I32_e32 [[V_ADD_I32_e32_1]], [[COPY2]], implicit-def $vcc, implicit $exec
21+
; GCN: FLAT_STORE_DWORD [[COPY3]], [[V_ADD_I32_e32_2]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr
22+
%0:sgpr(s32) = COPY $sgpr0
23+
%1:sgpr(s32) = COPY $sgpr1
24+
%2:vgpr(s32) = COPY $vgpr0
25+
%3:vgpr(p1) = COPY $vgpr3_vgpr4
26+
%4:sgpr(s32) = G_CONSTANT i32 1
27+
%5:sgpr(s32) = G_CONSTANT i32 4096
28+
29+
; add ss
30+
%6:sgpr(s32) = G_ADD %0, %1
31+
32+
; add vs
33+
%7:vgpr(s32) = G_ADD %2, %6
34+
35+
; add sv
36+
%8:vgpr(s32) = G_ADD %6, %7
37+
38+
; add vv
39+
%9:vgpr(s32) = G_ADD %8, %2
40+
41+
G_STORE %9, %3 :: (store 4, addrspace 1)
42+
43+
...

0 commit comments

Comments
 (0)