[Mesa-dev] [PATCH 1/2] radeon/llvm: Basic support for SI EXEC register.

Tom Stellard tom at stellard.net
Tue Aug 28 11:20:50 PDT 2012


On Tue, Aug 28, 2012 at 08:14:07PM +0200, Michel Dänzer wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
> 
Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>  src/gallium/drivers/radeon/AMDGPUAsmPrinter.cpp |    3 +++
>  src/gallium/drivers/radeon/SIGenRegisterInfo.pl |    7 +++++++
>  src/gallium/drivers/radeon/SIInstructions.td    |   15 +++++++++++++--
>  3 files changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeon/AMDGPUAsmPrinter.cpp b/src/gallium/drivers/radeon/AMDGPUAsmPrinter.cpp
> index 1f36105..eeb8d26 100644
> --- a/src/gallium/drivers/radeon/AMDGPUAsmPrinter.cpp
> +++ b/src/gallium/drivers/radeon/AMDGPUAsmPrinter.cpp
> @@ -81,6 +81,9 @@ void AMDGPUAsmPrinter::EmitProgramInfo(MachineFunction &MF) {
>            VCCUsed = true;
>            continue;
>          }
> +        if (reg == AMDGPU::EXEC) {
> +          continue;
> +        }
>          if (AMDGPU::SReg_32RegClass.contains(reg)) {
>            isSGPR = true;
>            width = 1;
> diff --git a/src/gallium/drivers/radeon/SIGenRegisterInfo.pl b/src/gallium/drivers/radeon/SIGenRegisterInfo.pl
> index 110c04f..dd0efcc 100644
> --- a/src/gallium/drivers/radeon/SIGenRegisterInfo.pl
> +++ b/src/gallium/drivers/radeon/SIGenRegisterInfo.pl
> @@ -88,6 +88,7 @@ class SGPR_256 <bits<8> num, string name, list<Register> subregs> :
>      SI_256 <name, subregs>;
>  
>  def VCC : SIReg<"VCC">;
> +def EXEC : SIReg<"EXEC">;
>  def SCC : SIReg<"SCC">;
>  def SREG_LIT_0 : SIReg <"S LIT 0">;
>  
> @@ -169,6 +170,7 @@ def AllReg_32 : RegisterClass<"AMDGPU", [f32, i32], 32,
>  
>  def SCCReg : RegisterClass<"AMDGPU", [i1], 1, (add SCC)>;
>  def VCCReg : RegisterClass<"AMDGPU", [i1], 1, (add VCC)>;
> +def EXECReg : RegisterClass<"AMDGPU", [i1], 1, (add EXEC)>;
>  
>  STRING
>  
> @@ -271,6 +273,11 @@ sub print_reg_class {
>      push (@registers, 'VCC')
>    }
>  
> +  #Add EXEC to SReg_64
> +  if ($class_prefix eq 'SReg' and $reg_width == 64) {
> +    push (@registers, 'EXEC')
> +  }
> +
>    my $reg_list = join(', ', @registers);
>  
>    print "def $class_prefix\_$reg_width : RegisterClass<\"AMDGPU\", [" . join (', ', @types) . "], $reg_width,\n  (add $reg_list)\n>{\n";
> diff --git a/src/gallium/drivers/radeon/SIInstructions.td b/src/gallium/drivers/radeon/SIInstructions.td
> index 3047321..ee4c8f5 100644
> --- a/src/gallium/drivers/radeon/SIInstructions.td
> +++ b/src/gallium/drivers/radeon/SIInstructions.td
> @@ -630,8 +630,19 @@ def S_CBRANCH_VCCNZ : SOPP <
>    "S_CBRANCH_VCCNZ",
>    []
>  >;
> -//def S_CBRANCH_EXECZ : SOPP_ <0x00000008, "S_CBRANCH_EXECZ", []>;
> -//def S_CBRANCH_EXECNZ : SOPP_ <0x00000009, "S_CBRANCH_EXECNZ", []>;
> +
> +let DisableEncoding = "$exec" in {
> +def S_CBRANCH_EXECZ : SOPP <
> +  0x00000008, (ins brtarget:$target, EXECReg:$exec),
> +  "S_CBRANCH_EXECZ",
> +  []
> +>;
> +def S_CBRANCH_EXECNZ : SOPP <
> +  0x00000009, (ins brtarget:$target, EXECReg:$exec),
> +  "S_CBRANCH_EXECNZ",
> +  []
> +>;
> +} // End DisableEncoding = "$exec"
>  
>  
>  } // End isBranch = 1
> -- 
> 1.7.10.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list