@@ -400,6 +400,36 @@ void AMDGPUAsmPrinter::emitCommonFunctionComments(
400400 false );
401401}
402402
403+ SmallString<128 > AMDGPUAsmPrinter::getMCExprStr (const MCExpr *Value) {
404+ SmallString<128 > Str;
405+ raw_svector_ostream OSS (Str);
406+ int64_t IVal;
407+ if (Value->evaluateAsAbsolute (IVal)) {
408+ OSS << static_cast <uint64_t >(IVal);
409+ } else {
410+ Value->print (OSS, MAI);
411+ }
412+ return Str;
413+ }
414+
415+ void AMDGPUAsmPrinter::emitCommonFunctionComments (
416+ const MCExpr *NumVGPR, const MCExpr *NumAGPR, const MCExpr *TotalNumVGPR,
417+ const MCExpr *NumSGPR, const MCExpr *ScratchSize, uint64_t CodeSize,
418+ const AMDGPUMachineFunction *MFI) {
419+ OutStreamer->emitRawComment (" codeLenInByte = " + Twine (CodeSize), false );
420+ OutStreamer->emitRawComment (" NumSgprs: " + getMCExprStr (NumSGPR), false );
421+ OutStreamer->emitRawComment (" NumVgprs: " + getMCExprStr (NumVGPR), false );
422+ if (NumAGPR && TotalNumVGPR) {
423+ OutStreamer->emitRawComment (" NumAgprs: " + getMCExprStr (NumAGPR), false );
424+ OutStreamer->emitRawComment (" TotalNumVgprs: " + getMCExprStr (TotalNumVGPR),
425+ false );
426+ }
427+ OutStreamer->emitRawComment (" ScratchSize: " + getMCExprStr (ScratchSize),
428+ false );
429+ OutStreamer->emitRawComment (" MemoryBound: " + Twine (MFI->isMemoryBound ()),
430+ false );
431+ }
432+
403433uint16_t AMDGPUAsmPrinter::getAmdhsaKernelCodeProperties (
404434 const MachineFunction &MF) const {
405435 const SIMachineFunctionInfo &MFI = *MF.getInfo <SIMachineFunctionInfo>();
@@ -554,13 +584,10 @@ bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
554584
555585 OutStreamer->emitRawComment (" Kernel info:" , false );
556586 emitCommonFunctionComments (
557- getMCExprValue (CurrentProgramInfo.NumArchVGPR , Ctx),
558- STM.hasMAIInsts () ? getMCExprValue (CurrentProgramInfo.NumAccVGPR , Ctx)
559- : std::optional<uint32_t >(),
560- getMCExprValue (CurrentProgramInfo.NumVGPR , Ctx),
561- getMCExprValue (CurrentProgramInfo.NumSGPR , Ctx),
562- getMCExprValue (CurrentProgramInfo.ScratchSize , Ctx),
563- getFunctionCodeSize (MF), MFI);
587+ CurrentProgramInfo.NumArchVGPR ,
588+ STM.hasMAIInsts () ? CurrentProgramInfo.NumAccVGPR : nullptr ,
589+ CurrentProgramInfo.NumVGPR , CurrentProgramInfo.NumSGPR ,
590+ CurrentProgramInfo.ScratchSize , getFunctionCodeSize (MF), MFI);
564591
565592 OutStreamer->emitRawComment (
566593 " FloatMode: " + Twine (CurrentProgramInfo.FloatMode ), false );
@@ -571,43 +598,38 @@ bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
571598 " bytes/workgroup (compile time only)" , false );
572599
573600 OutStreamer->emitRawComment (
574- " SGPRBlocks: " +
575- Twine (getMCExprValue (CurrentProgramInfo.SGPRBlocks , Ctx)),
576- false );
601+ " SGPRBlocks: " + getMCExprStr (CurrentProgramInfo.SGPRBlocks ), false );
602+
577603 OutStreamer->emitRawComment (
578- " VGPRBlocks: " +
579- Twine (getMCExprValue (CurrentProgramInfo.VGPRBlocks , Ctx)),
580- false );
604+ " VGPRBlocks: " + getMCExprStr (CurrentProgramInfo.VGPRBlocks ), false );
581605
582606 OutStreamer->emitRawComment (
583607 " NumSGPRsForWavesPerEU: " +
584- Twine (
585- getMCExprValue (CurrentProgramInfo.NumSGPRsForWavesPerEU , Ctx)),
608+ getMCExprStr (CurrentProgramInfo.NumSGPRsForWavesPerEU ),
586609 false );
587610 OutStreamer->emitRawComment (
588611 " NumVGPRsForWavesPerEU: " +
589- Twine (
590- getMCExprValue (CurrentProgramInfo.NumVGPRsForWavesPerEU , Ctx)),
612+ getMCExprStr (CurrentProgramInfo.NumVGPRsForWavesPerEU ),
591613 false );
592614
593- if (STM.hasGFX90AInsts ())
615+ if (STM.hasGFX90AInsts ()) {
616+ const MCExpr *AdjustedAccum = MCBinaryExpr::createAdd (
617+ CurrentProgramInfo.AccumOffset , MCConstantExpr::create (1 , Ctx), Ctx);
618+ AdjustedAccum = MCBinaryExpr::createMul (
619+ AdjustedAccum, MCConstantExpr::create (4 , Ctx), Ctx);
594620 OutStreamer->emitRawComment (
595- " AccumOffset: " +
596- Twine ((getMCExprValue (CurrentProgramInfo.AccumOffset , Ctx) + 1 ) *
597- 4 ),
598- false );
621+ " AccumOffset: " + getMCExprStr (AdjustedAccum), false );
622+ }
599623
600624 OutStreamer->emitRawComment (
601- " Occupancy: " +
602- Twine (getMCExprValue (CurrentProgramInfo.Occupancy , Ctx)),
603- false );
625+ " Occupancy: " + getMCExprStr (CurrentProgramInfo.Occupancy ), false );
604626
605627 OutStreamer->emitRawComment (
606628 " WaveLimiterHint : " + Twine (MFI->needsWaveLimiter ()), false );
607629
608630 OutStreamer->emitRawComment (
609631 " COMPUTE_PGM_RSRC2:SCRATCH_EN: " +
610- Twine ( getMCExprValue ( CurrentProgramInfo.ScratchEnable , Ctx) ),
632+ getMCExprStr ( CurrentProgramInfo.ScratchEnable ),
611633 false );
612634 OutStreamer->emitRawComment (" COMPUTE_PGM_RSRC2:USER_SGPR: " +
613635 Twine (CurrentProgramInfo.UserSGPR ),
@@ -628,20 +650,25 @@ bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
628650 Twine (CurrentProgramInfo.TIdIGCompCount ),
629651 false );
630652
653+ int64_t PGMRSrc3;
631654 assert (STM.hasGFX90AInsts () ||
632- getMCExprValue (CurrentProgramInfo.ComputePGMRSrc3GFX90A , Ctx) == 0 );
655+ (CurrentProgramInfo.ComputePGMRSrc3GFX90A ->evaluateAsAbsolute (
656+ PGMRSrc3) &&
657+ static_cast <uint64_t >(PGMRSrc3) == 0 ));
633658 if (STM.hasGFX90AInsts ()) {
634659 OutStreamer->emitRawComment (
635660 " COMPUTE_PGM_RSRC3_GFX90A:ACCUM_OFFSET: " +
636- Twine ((AMDHSA_BITS_GET (
637- getMCExprValue (CurrentProgramInfo.ComputePGMRSrc3GFX90A , Ctx),
638- amdhsa::COMPUTE_PGM_RSRC3_GFX90A_ACCUM_OFFSET))),
661+ getMCExprStr (MCKernelDescriptor::bits_get (
662+ CurrentProgramInfo.ComputePGMRSrc3GFX90A ,
663+ amdhsa::COMPUTE_PGM_RSRC3_GFX90A_ACCUM_OFFSET_SHIFT,
664+ amdhsa::COMPUTE_PGM_RSRC3_GFX90A_ACCUM_OFFSET, Ctx)),
639665 false );
640666 OutStreamer->emitRawComment (
641667 " COMPUTE_PGM_RSRC3_GFX90A:TG_SPLIT: " +
642- Twine ((AMDHSA_BITS_GET (
643- getMCExprValue (CurrentProgramInfo.ComputePGMRSrc3GFX90A , Ctx),
644- amdhsa::COMPUTE_PGM_RSRC3_GFX90A_TG_SPLIT))),
668+ getMCExprStr (MCKernelDescriptor::bits_get (
669+ CurrentProgramInfo.ComputePGMRSrc3GFX90A ,
670+ amdhsa::COMPUTE_PGM_RSRC3_GFX90A_TG_SPLIT_SHIFT,
671+ amdhsa::COMPUTE_PGM_RSRC3_GFX90A_TG_SPLIT, Ctx)),
645672 false );
646673 }
647674 }
@@ -1463,28 +1490,26 @@ void AMDGPUAsmPrinter::emitResourceUsageRemarks(
14631490 // remarks to simulate newlines. If and when clang does accept newlines, this
14641491 // formatting should be aggregated into one remark with newlines to avoid
14651492 // printing multiple diagnostic location and diag opts.
1466- MCContext &MCCtx = MF.getContext ();
14671493 EmitResourceUsageRemark (" FunctionName" , " Function Name" ,
14681494 MF.getFunction ().getName ());
14691495 EmitResourceUsageRemark (" NumSGPR" , " SGPRs" ,
1470- getMCExprValue (CurrentProgramInfo.NumSGPR , MCCtx));
1471- EmitResourceUsageRemark (
1472- " NumVGPR" , " VGPRs" ,
1473- getMCExprValue (CurrentProgramInfo.NumArchVGPR , MCCtx));
1496+ getMCExprStr (CurrentProgramInfo.NumSGPR ));
1497+ EmitResourceUsageRemark (" NumVGPR" , " VGPRs" ,
1498+ getMCExprStr (CurrentProgramInfo.NumArchVGPR ));
14741499 if (hasMAIInsts) {
1475- EmitResourceUsageRemark (
1476- " NumAGPR" , " AGPRs" ,
1477- getMCExprValue (CurrentProgramInfo.NumAccVGPR , MCCtx));
1500+ EmitResourceUsageRemark (" NumAGPR" , " AGPRs" ,
1501+ getMCExprStr (CurrentProgramInfo.NumAccVGPR ));
14781502 }
1479- EmitResourceUsageRemark (
1480- " ScratchSize" , " ScratchSize [bytes/lane]" ,
1481- getMCExprValue (CurrentProgramInfo.ScratchSize , MCCtx));
1503+ EmitResourceUsageRemark (" ScratchSize" , " ScratchSize [bytes/lane]" ,
1504+ getMCExprStr (CurrentProgramInfo.ScratchSize ));
1505+ int64_t DynStack;
1506+ bool DynStackEvaluatable =
1507+ CurrentProgramInfo.DynamicCallStack ->evaluateAsAbsolute (DynStack);
14821508 StringRef DynamicStackStr =
1483- getMCExprValue (CurrentProgramInfo.DynamicCallStack , MCCtx) ? " True"
1484- : " False" ;
1509+ DynStackEvaluatable && DynStack ? " True" : " False" ;
14851510 EmitResourceUsageRemark (" DynamicStack" , " Dynamic Stack" , DynamicStackStr);
14861511 EmitResourceUsageRemark (" Occupancy" , " Occupancy [waves/SIMD]" ,
1487- getMCExprValue (CurrentProgramInfo.Occupancy , MCCtx ));
1512+ getMCExprStr (CurrentProgramInfo.Occupancy ));
14881513 EmitResourceUsageRemark (" SGPRSpill" , " SGPRs Spill" ,
14891514 CurrentProgramInfo.SGPRSpill );
14901515 EmitResourceUsageRemark (" VGPRSpill" , " VGPRs Spill" ,
0 commit comments