[PATCH] R600/SI: Print code size along with used register

Tom Stellard tom at stellard.net
Tue Apr 15 15:23:27 PDT 2014


On Tue, Apr 15, 2014 at 03:15:39PM -0700, Matt Arsenault wrote:
> Only prints it in the comment. Doesn't emit the value in the binary since I don't know what to do for that
> 
> http://reviews.llvm.org/D3388
> 
> Files:
>   lib/Target/R600/AMDGPUAsmPrinter.cpp
>   lib/Target/R600/AMDGPUAsmPrinter.h
> 
> Index: lib/Target/R600/AMDGPUAsmPrinter.cpp
> ===================================================================
> --- lib/Target/R600/AMDGPUAsmPrinter.cpp
> +++ lib/Target/R600/AMDGPUAsmPrinter.cpp
> @@ -64,7 +64,7 @@
>    const AMDGPUSubtarget &STM = TM.getSubtarget<AMDGPUSubtarget>();
>    SIProgramInfo KernelInfo;
>    if (STM.getGeneration() > AMDGPUSubtarget::NORTHERN_ISLANDS) {
> -    findNumUsedRegistersSI(MF, KernelInfo.NumSGPR, KernelInfo.NumVGPR);
> +    getSIProgramInfo(KernelInfo, MF);
>      EmitProgramInfoSI(MF, KernelInfo);
>    } else {
>      EmitProgramInfoR600(MF);
> @@ -84,8 +84,10 @@
>                                SectionKind::getReadOnly());
>      OutStreamer.SwitchSection(CommentSection);
>  
> -    if (STM.getGeneration() > AMDGPUSubtarget::NORTHERN_ISLANDS) {
> +    if (STM.getGeneration() >= AMDGPUSubtarget::SOUTHERN_ISLANDS) {
>        OutStreamer.emitRawComment(" Kernel info:", false);
> +      OutStreamer.emitRawComment(" codeLenInByte = " + Twine(KernelInfo.CodeLen),
> +                                 false);
>        OutStreamer.emitRawComment(" NumSgprs: " + Twine(KernelInfo.NumSGPR),
>                                   false);
>        OutStreamer.emitRawComment(" NumVgprs: " + Twine(KernelInfo.NumVGPR),
> @@ -184,9 +186,9 @@
>    }
>  }
>  
> -void AMDGPUAsmPrinter::findNumUsedRegistersSI(MachineFunction &MF,
> -                                              unsigned &NumSGPR,
> -                                              unsigned &NumVGPR) const {
> +void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
> +                                        MachineFunction &MF) const {
> +  uint64_t CodeSize = 0;
>    unsigned MaxSGPR = 0;
>    unsigned MaxVGPR = 0;
>    bool VCCUsed = false;
> @@ -200,6 +202,9 @@
>                                                      I != E; ++I) {
>        MachineInstr &MI = *I;
>  
> +      // TODO: CodeSize should account for multiple functions.
> +      CodeSize += MI.getDesc().Size;
> +
>        unsigned numOperands = MI.getNumOperands();
>        for (unsigned op_idx = 0; op_idx < numOperands; op_idx++) {
>          MachineOperand &MO = MI.getOperand(op_idx);
> @@ -274,13 +279,9 @@
>    if (VCCUsed)
>      MaxSGPR += 2;
>  
> -  NumSGPR = MaxSGPR;
> -  NumVGPR = MaxVGPR;
> -}
> -
> -void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &Out,
> -                                        MachineFunction &MF) const {
> -  findNumUsedRegistersSI(MF, Out.NumSGPR, Out.NumVGPR);
> +  ProgInfo.CodeLen = CodeSize;
> +  ProgInfo.NumSGPR = MaxSGPR;
> +  ProgInfo.NumVGPR = MaxVGPR;
>  }
>  
>  void AMDGPUAsmPrinter::EmitProgramInfoSI(MachineFunction &MF,
> @@ -298,6 +299,8 @@
>    }
>  
>    OutStreamer.EmitIntValue(RsrcReg, 4);
> +
> +  // TODO: Emit code size.

This isn't necessary.  Otherwise, LGTM.

-Tom

>    OutStreamer.EmitIntValue(S_00B028_VGPRS(KernelInfo.NumVGPR / 4) |
>                             S_00B028_SGPRS(KernelInfo.NumSGPR / 8), 4);
>  
> Index: lib/Target/R600/AMDGPUAsmPrinter.h
> ===================================================================
> --- lib/Target/R600/AMDGPUAsmPrinter.h
> +++ lib/Target/R600/AMDGPUAsmPrinter.h
> @@ -24,7 +24,12 @@
>  class AMDGPUAsmPrinter : public AsmPrinter {
>  private:
>    struct SIProgramInfo {
> -    SIProgramInfo() : NumSGPR(0), NumVGPR(0) {}
> +    SIProgramInfo() :
> +      CodeLen(0),
> +      NumSGPR(0),
> +      NumVGPR(0) {}
> +
> +    uint64_t CodeLen;
>      unsigned NumSGPR;
>      unsigned NumVGPR;
>    };

> Index: lib/Target/R600/AMDGPUAsmPrinter.cpp
> ===================================================================
> --- lib/Target/R600/AMDGPUAsmPrinter.cpp
> +++ lib/Target/R600/AMDGPUAsmPrinter.cpp
> @@ -64,7 +64,7 @@
>    const AMDGPUSubtarget &STM = TM.getSubtarget<AMDGPUSubtarget>();
>    SIProgramInfo KernelInfo;
>    if (STM.getGeneration() > AMDGPUSubtarget::NORTHERN_ISLANDS) {
> -    findNumUsedRegistersSI(MF, KernelInfo.NumSGPR, KernelInfo.NumVGPR);
> +    getSIProgramInfo(KernelInfo, MF);
>      EmitProgramInfoSI(MF, KernelInfo);
>    } else {
>      EmitProgramInfoR600(MF);
> @@ -84,8 +84,10 @@
>                                SectionKind::getReadOnly());
>      OutStreamer.SwitchSection(CommentSection);
>  
> -    if (STM.getGeneration() > AMDGPUSubtarget::NORTHERN_ISLANDS) {
> +    if (STM.getGeneration() >= AMDGPUSubtarget::SOUTHERN_ISLANDS) {
>        OutStreamer.emitRawComment(" Kernel info:", false);
> +      OutStreamer.emitRawComment(" codeLenInByte = " + Twine(KernelInfo.CodeLen),
> +                                 false);
>        OutStreamer.emitRawComment(" NumSgprs: " + Twine(KernelInfo.NumSGPR),
>                                   false);
>        OutStreamer.emitRawComment(" NumVgprs: " + Twine(KernelInfo.NumVGPR),
> @@ -184,9 +186,9 @@
>    }
>  }
>  
> -void AMDGPUAsmPrinter::findNumUsedRegistersSI(MachineFunction &MF,
> -                                              unsigned &NumSGPR,
> -                                              unsigned &NumVGPR) const {
> +void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
> +                                        MachineFunction &MF) const {
> +  uint64_t CodeSize = 0;
>    unsigned MaxSGPR = 0;
>    unsigned MaxVGPR = 0;
>    bool VCCUsed = false;
> @@ -200,6 +202,9 @@
>                                                      I != E; ++I) {
>        MachineInstr &MI = *I;
>  
> +      // TODO: CodeSize should account for multiple functions.
> +      CodeSize += MI.getDesc().Size;
> +
>        unsigned numOperands = MI.getNumOperands();
>        for (unsigned op_idx = 0; op_idx < numOperands; op_idx++) {
>          MachineOperand &MO = MI.getOperand(op_idx);
> @@ -274,13 +279,9 @@
>    if (VCCUsed)
>      MaxSGPR += 2;
>  
> -  NumSGPR = MaxSGPR;
> -  NumVGPR = MaxVGPR;
> -}
> -
> -void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &Out,
> -                                        MachineFunction &MF) const {
> -  findNumUsedRegistersSI(MF, Out.NumSGPR, Out.NumVGPR);
> +  ProgInfo.CodeLen = CodeSize;
> +  ProgInfo.NumSGPR = MaxSGPR;
> +  ProgInfo.NumVGPR = MaxVGPR;
>  }
>  
>  void AMDGPUAsmPrinter::EmitProgramInfoSI(MachineFunction &MF,
> @@ -298,6 +299,8 @@
>    }
>  
>    OutStreamer.EmitIntValue(RsrcReg, 4);
> +
> +  // TODO: Emit code size.
>    OutStreamer.EmitIntValue(S_00B028_VGPRS(KernelInfo.NumVGPR / 4) |
>                             S_00B028_SGPRS(KernelInfo.NumSGPR / 8), 4);
>  
> Index: lib/Target/R600/AMDGPUAsmPrinter.h
> ===================================================================
> --- lib/Target/R600/AMDGPUAsmPrinter.h
> +++ lib/Target/R600/AMDGPUAsmPrinter.h
> @@ -24,7 +24,12 @@
>  class AMDGPUAsmPrinter : public AsmPrinter {
>  private:
>    struct SIProgramInfo {
> -    SIProgramInfo() : NumSGPR(0), NumVGPR(0) {}
> +    SIProgramInfo() :
> +      CodeLen(0),
> +      NumSGPR(0),
> +      NumVGPR(0) {}
> +
> +    uint64_t CodeLen;
>      unsigned NumSGPR;
>      unsigned NumVGPR;
>    };

> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list