Skip to content

Commit 62abc8c

Browse files
perlfujayfoad
authored andcommitted
[AMDGPU] Set GFX11 null export target based on export attributes
If shader only has depth exports use MRTZ otherwise use MRT0. Differential Revision: https://reviews.llvm.org/D128185
1 parent 98dbaed commit 62abc8c

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

llvm/lib/Target/AMDGPU/SILateBranchLowering.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,22 @@ static void generateEndPgm(MachineBasicBlock &MBB,
7272
bool IsPS = F.getCallingConv() == CallingConv::AMDGPU_PS;
7373

7474
// Check if hardware has been configured to expect color or depth exports.
75-
bool HasExports =
76-
AMDGPU::getHasColorExport(F) || AMDGPU::getHasDepthExport(F);
75+
bool HasColorExports = AMDGPU::getHasColorExport(F);
76+
bool HasDepthExports = AMDGPU::getHasDepthExport(F);
77+
bool HasExports = HasColorExports || HasDepthExports;
7778

7879
// Prior to GFX10, hardware always expects at least one export for PS.
7980
bool MustExport = !AMDGPU::isGFX10Plus(TII->getSubtarget());
8081

8182
if (IsPS && (HasExports || MustExport)) {
8283
// Generate "null export" if hardware is expecting PS to export.
84+
const GCNSubtarget &ST = MBB.getParent()->getSubtarget<GCNSubtarget>();
85+
int Target =
86+
ST.hasNullExportTarget()
87+
? AMDGPU::Exp::ET_NULL
88+
: (HasColorExports ? AMDGPU::Exp::ET_MRT0 : AMDGPU::Exp::ET_MRTZ);
8389
BuildMI(MBB, I, DL, TII->get(AMDGPU::EXP_DONE))
84-
.addImm(AMDGPU::Exp::ET_NULL)
90+
.addImm(Target)
8591
.addReg(AMDGPU::VGPR0, RegState::Undef)
8692
.addReg(AMDGPU::VGPR0, RegState::Undef)
8793
.addReg(AMDGPU::VGPR0, RegState::Undef)

llvm/test/CodeGen/AMDGPU/early-term.mir

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@
2626
ret void
2727
}
2828

29+
define amdgpu_ps void @early_term_depth_only() #1 {
30+
ret void
31+
}
32+
2933
attributes #0 = { "amdgpu-color-export"="0" "amdgpu-depth-export"="0" }
34+
attributes #1 = { "amdgpu-color-export"="0" "amdgpu-depth-export"="1" }
3035
...
3136

3237
---
@@ -255,3 +260,41 @@ body: |
255260
EXP_DONE 0, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
256261
S_ENDPGM 0
257262
...
263+
264+
---
265+
name: early_term_depth_only
266+
tracksRegLiveness: true
267+
liveins:
268+
- { reg: '$sgpr0' }
269+
- { reg: '$sgpr1' }
270+
body: |
271+
; GCN-LABEL: name: early_term_depth_only
272+
; GCN: bb.0:
273+
; GCN: successors: %bb.1(0x80000000), %bb.2(0x00000000)
274+
; GCN: liveins: $sgpr0, $sgpr1
275+
; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
276+
; GCN: dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
277+
; GCN: S_CBRANCH_SCC0 %bb.2, implicit $scc
278+
; GCN: bb.1:
279+
; GCN: liveins: $vgpr0
280+
; GCN: EXP_DONE 8, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
281+
; GCN: S_ENDPGM 0
282+
; GCN: bb.2:
283+
; GCN: $exec = S_MOV_B64 0
284+
; GFX9: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
285+
; GFX10: EXP_DONE 9, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
286+
; GFX11: EXP_DONE 8, undef $vgpr0, undef $vgpr0, undef $vgpr0, undef $vgpr0, 1, 0, 0, implicit $exec
287+
; GCN: S_ENDPGM 0
288+
bb.0:
289+
liveins: $sgpr0, $sgpr1
290+
successors: %bb.1
291+
292+
$vgpr0 = V_MOV_B32_e32 0, implicit $exec
293+
dead $sgpr0 = S_AND_B32 $sgpr0, killed $sgpr1, implicit-def $scc
294+
SI_EARLY_TERMINATE_SCC0 implicit $scc, implicit $exec
295+
296+
bb.1:
297+
liveins: $vgpr0
298+
EXP_DONE 8, $vgpr0, $vgpr0, $vgpr0, $vgpr0, -1, -1, 15, implicit $exec
299+
S_ENDPGM 0
300+
...

0 commit comments

Comments
 (0)