Skip to content

Commit 3e08b77

Browse files
committed
AMDGPU/GlobalISel: Scalarize add/sub
llvm-svn: 352167
1 parent e6cebd0 commit 3e08b77

File tree

4 files changed

+66
-5
lines changed

4 files changed

+66
-5
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,7 @@ LegalizerHelper::fewerElementsVector(MachineInstr &MI, unsigned TypeIdx,
13961396
return Legalized;
13971397
}
13981398
case TargetOpcode::G_ADD:
1399+
case TargetOpcode::G_SUB:
13991400
case TargetOpcode::G_MUL:
14001401
case TargetOpcode::G_SMULH:
14011402
case TargetOpcode::G_UMULH:

llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,10 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST,
9393

9494
setAction({G_BRCOND, S1}, Legal);
9595

96-
setAction({G_ADD, S32}, Legal);
9796
setAction({G_ASHR, S32}, Legal);
9897
setAction({G_ASHR, 1, S32}, Legal);
99-
setAction({G_SUB, S32}, Legal);
10098

101-
getActionDefinitionsBuilder({G_MUL, G_UMULH, G_SMULH})
99+
getActionDefinitionsBuilder({G_ADD, G_SUB, G_MUL, G_UMULH, G_SMULH})
102100
.legalFor({S32})
103101
.scalarize(0);
104102

llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-add.mir

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,39 @@
22
# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck %s
33

44
---
5-
name: test_add
5+
name: test_add_s32
66
body: |
77
bb.0:
88
liveins: $vgpr0, $vgpr1
99
10-
; CHECK-LABEL: name: test_add
10+
; CHECK-LABEL: name: test_add_s32
1111
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1212
; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1313
; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[COPY1]]
14+
; CHECK: $vgpr0 = COPY [[ADD]](s32)
1415
%0:_(s32) = COPY $vgpr0
1516
%1:_(s32) = COPY $vgpr1
1617
%2:_(s32) = G_ADD %0, %1
1718
$vgpr0 = COPY %2
1819
...
20+
21+
---
22+
name: test_add_v2s32
23+
body: |
24+
bb.0:
25+
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
26+
27+
; CHECK-LABEL: name: test_add_v2s32
28+
; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
29+
; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
30+
; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
31+
; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
32+
; CHECK: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[UV]], [[UV2]]
33+
; CHECK: [[ADD1:%[0-9]+]]:_(s32) = G_ADD [[UV1]], [[UV3]]
34+
; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ADD]](s32), [[ADD1]](s32)
35+
; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
36+
%0:_(<2 x s32>) = COPY $vgpr0_vgpr1
37+
%1:_(<2 x s32>) = COPY $vgpr2_vgpr3
38+
%2:_(<2 x s32>) = G_ADD %0, %1
39+
$vgpr0_vgpr1 = COPY %2
40+
...
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck %s
3+
4+
---
5+
name: test_sub_s32
6+
body: |
7+
bb.0:
8+
liveins: $vgpr0, $vgpr1
9+
10+
; CHECK-LABEL: name: test_sub_s32
11+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
12+
; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
13+
; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[COPY]], [[COPY1]]
14+
; CHECK: $vgpr0 = COPY [[SUB]](s32)
15+
%0:_(s32) = COPY $vgpr0
16+
%1:_(s32) = COPY $vgpr1
17+
%2:_(s32) = G_SUB %0, %1
18+
$vgpr0 = COPY %2
19+
...
20+
21+
---
22+
name: test_sub_v2s32
23+
body: |
24+
bb.0:
25+
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
26+
27+
; CHECK-LABEL: name: test_sub_v2s32
28+
; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
29+
; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
30+
; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
31+
; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
32+
; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[UV]], [[UV2]]
33+
; CHECK: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[UV1]], [[UV3]]
34+
; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SUB]](s32), [[SUB1]](s32)
35+
; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
36+
%0:_(<2 x s32>) = COPY $vgpr0_vgpr1
37+
%1:_(<2 x s32>) = COPY $vgpr2_vgpr3
38+
%2:_(<2 x s32>) = G_SUB %0, %1
39+
$vgpr0_vgpr1 = COPY %2
40+
...

0 commit comments

Comments
 (0)