Skip to content

Commit 60dbde6

Browse files
authored
[AMDGPU] report named barrier cnt part2 (llvm#154588)
1 parent 8ed9c61 commit 60dbde6

File tree

5 files changed

+30
-10
lines changed

5 files changed

+30
-10
lines changed

llvm/docs/AMDGPUUsage.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18207,6 +18207,8 @@ terminated by an ``.end_amdhsa_kernel`` directive.
1820718207
(wavefrontsize64)
1820818208
``.amdhsa_uses_dynamic_stack`` 0 GFX6-GFX12 Controls USES_DYNAMIC_STACK in
1820918209
:ref:`amdgpu-amdhsa-kernel-descriptor-v3-table`.
18210+
``.amdhsa_named_barrier_count`` 0 GFX1250+ Controls NAMED_BAR_CNT in
18211+
:ref:`amdgpu-amdhsa-compute_pgm_rsrc3-gfx12-table`.
1821018212
``.amdhsa_system_sgpr_private_segment_wavefront_offset`` 0 GFX6-GFX10 Controls ENABLE_PRIVATE_SEGMENT in
1821118213
(except :ref:`amdgpu-amdhsa-compute_pgm_rsrc2-gfx6-gfx12-table`.
1821218214
GFX942)

llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -809,15 +809,10 @@ bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
809809
" AccumOffset: " + getMCExprStr(AdjustedAccum), false);
810810
}
811811

812-
if (AMDGPU::isGFX1250(STM)) {
813-
const MCExpr *BarBlkConst = MCConstantExpr::create(4, Ctx);
814-
const MCExpr *AlignToBlk = AMDGPUMCExpr::createAlignTo(
815-
CurrentProgramInfo.NamedBarCnt, BarBlkConst, Ctx);
816-
const MCExpr *BarBlks =
817-
MCBinaryExpr::createDiv(AlignToBlk, BarBlkConst, Ctx);
818-
OutStreamer->emitRawComment(" NamedBarCnt: " + getMCExprStr(BarBlks),
819-
false);
820-
}
812+
if (AMDGPU::isGFX1250(STM))
813+
OutStreamer->emitRawComment(
814+
" NamedBarCnt: " + getMCExprStr(CurrentProgramInfo.NamedBarCnt),
815+
false);
821816

822817
OutStreamer->emitRawComment(
823818
" Occupancy: " + getMCExprStr(CurrentProgramInfo.Occupancy), false);
@@ -1023,7 +1018,11 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
10231018
ProgInfo.DynamicCallStack =
10241019
MCBinaryExpr::createOr(GetSymRefExpr(RIK::RIK_HasDynSizedStack),
10251020
GetSymRefExpr(RIK::RIK_HasRecursion), Ctx);
1026-
ProgInfo.NamedBarCnt = GetSymRefExpr(RIK::RIK_NumNamedBarrier);
1021+
1022+
const MCExpr *BarBlkConst = MCConstantExpr::create(4, Ctx);
1023+
const MCExpr *AlignToBlk = AMDGPUMCExpr::createAlignTo(
1024+
GetSymRefExpr(RIK::RIK_NumNamedBarrier), BarBlkConst, Ctx);
1025+
ProgInfo.NamedBarCnt = MCBinaryExpr::createDiv(AlignToBlk, BarBlkConst, Ctx);
10271026

10281027
const SIMachineFunctionInfo *MFI = MF.getInfo<SIMachineFunctionInfo>();
10291028

llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5986,6 +5986,7 @@ bool AMDGPUAsmParser::ParseDirectiveAMDHSAKernel() {
59865986
SMRange VGPRRange;
59875987
const MCExpr *NextFreeVGPR = ZeroExpr;
59885988
const MCExpr *AccumOffset = MCConstantExpr::create(0, getContext());
5989+
const MCExpr *NamedBarCnt = ZeroExpr;
59895990
uint64_t SharedVGPRCount = 0;
59905991
uint64_t PreloadLength = 0;
59915992
uint64_t PreloadOffset = 0;
@@ -6208,6 +6209,10 @@ bool AMDGPUAsmParser::ParseDirectiveAMDHSAKernel() {
62086209
if (!isGFX90A())
62096210
return Error(IDRange.Start, "directive requires gfx90a+", IDRange);
62106211
AccumOffset = ExprVal;
6212+
} else if (ID == ".amdhsa_named_barrier_count") {
6213+
if (!isGFX1250())
6214+
return Error(IDRange.Start, "directive requires gfx1250+", IDRange);
6215+
NamedBarCnt = ExprVal;
62116216
} else if (ID == ".amdhsa_reserve_vcc") {
62126217
if (EvaluatableExpr && !isUInt<1>(Val))
62136218
return OutOfRangeError(ValRange);
@@ -6448,6 +6453,12 @@ bool AMDGPUAsmParser::ParseDirectiveAMDHSAKernel() {
64486453
getContext());
64496454
}
64506455

6456+
if (isGFX1250())
6457+
MCKernelDescriptor::bits_set(KD.compute_pgm_rsrc3, NamedBarCnt,
6458+
COMPUTE_PGM_RSRC3_GFX125_NAMED_BAR_CNT_SHIFT,
6459+
COMPUTE_PGM_RSRC3_GFX125_NAMED_BAR_CNT,
6460+
getContext());
6461+
64516462
if (IVersion.Major >= 10 && IVersion.Major < 12) {
64526463
// SharedVGPRCount < 16 checked by PARSE_ENTRY_BITS
64536464
if (SharedVGPRCount && EnableWavefrontSize32 && *EnableWavefrontSize32) {

llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,12 @@ void AMDGPUTargetAsmStreamer::EmitAmdhsaKernelDescriptor(
507507
OS << '\n';
508508
}
509509

510+
if (AMDGPU::isGFX1250(STI))
511+
PrintField(KD.compute_pgm_rsrc3,
512+
amdhsa::COMPUTE_PGM_RSRC3_GFX125_NAMED_BAR_CNT_SHIFT,
513+
amdhsa::COMPUTE_PGM_RSRC3_GFX125_NAMED_BAR_CNT,
514+
".amdhsa_named_barrier_count");
515+
510516
OS << "\t\t.amdhsa_reserve_vcc ";
511517
EmitMCExpr(ReserveVCC);
512518
OS << '\n';

llvm/test/CodeGen/AMDGPU/s-barrier-lowering.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ define void @func2() {
2626
ret void
2727
}
2828

29+
; SOUT: .amdhsa_named_barrier_count 1
2930
; SOUT: .set kernel1.num_named_barrier, max(2, func1.num_named_barrier, func2.num_named_barrier)
3031
define amdgpu_kernel void @kernel1() #0 {
3132
; CHECK-DAG: call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar1.kernel1, i32 11)
@@ -39,6 +40,7 @@ define amdgpu_kernel void @kernel1() #0 {
3940
ret void
4041
}
4142

43+
; SOUT: .amdhsa_named_barrier_count 1
4244
; SOUT: .set kernel2.num_named_barrier, max(2, func2.num_named_barrier)
4345
define amdgpu_kernel void @kernel2() #0 {
4446
; CHECK-DAG: call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar1, i32 9)

0 commit comments

Comments
 (0)