[Mesa-dev] [PATCH 1/3] radeon/llvm: Add a fdiv pattern.

Tom Stellard tom at stellard.net
Tue Sep 18 07:27:04 PDT 2012


On Tue, Sep 18, 2012 at 03:59:26PM +0200, Vincent Lejeune wrote:
> ---
>  src/gallium/drivers/radeon/R600Instructions.td | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
>

This looks good to me.  I have a patch locally that remove the
int_AMDGPU_div intrinsic altogether, so I'll try to push that out
after your patch.

Reviewed-by: Tom Stellard <thomas.stellard at amd.com>

> diff --git a/src/gallium/drivers/radeon/R600Instructions.td b/src/gallium/drivers/radeon/R600Instructions.td
> index 7e2deac..75c6825 100644
> --- a/src/gallium/drivers/radeon/R600Instructions.td
> +++ b/src/gallium/drivers/radeon/R600Instructions.td
> @@ -702,11 +702,18 @@ class COS_Common <bits<32> inst> : R600_1OP <
>  // Helper patterns for complex intrinsics
>  //===----------------------------------------------------------------------===//
>  
> -class DIV_Common <InstR600 recip_ieee> : Pat<
> +multiclass DIV_Common <InstR600 recip_ieee> {
> +def : Pat<
>    (int_AMDGPU_div R600_Reg32:$src0, R600_Reg32:$src1),
>    (MUL R600_Reg32:$src0, (recip_ieee R600_Reg32:$src1))
>  >;
> 
> +def : Pat<
> +  (fdiv R600_Reg32:$src0, R600_Reg32:$src1),
> +  (MUL R600_Reg32:$src0, (recip_ieee R600_Reg32:$src1))
> +>;
> +}
> +
>  class SSG_Common <InstR600 cndgt, InstR600 cndge> : Pat <
>    (int_AMDGPU_ssg R600_Reg32:$src),
>    (cndgt R600_Reg32:$src, (f32 ONE), (cndge R600_Reg32:$src, (f32 ZERO), (f32 NEG_ONE)))
> @@ -753,7 +760,7 @@ let Predicates = [isR600] in {
>    def MULHI_UINT_r600 : MULHI_UINT_Common<0x76>;
>    def RECIP_UINT_r600 : RECIP_UINT_Common <0x78>;
>  
> -  def DIV_r600 : DIV_Common<RECIP_IEEE_r600>;
> +  defm DIV_r600 : DIV_Common<RECIP_IEEE_r600>;
>    def POW_r600 : POW_Common<LOG_IEEE_r600, EXP_IEEE_r600, MUL, GPRF32>;
>    def SSG_r600 : SSG_Common<CNDGT_r600, CNDGE_r600>;
>    def TGSI_LIT_Z_r600 : TGSI_LIT_Z_Common<MUL_LIT_r600, LOG_CLAMPED_r600, EXP_IEEE_r600>;
> @@ -849,7 +856,7 @@ let Predicates = [isEGorCayman] in {
>    def : DOT4_Pat <DOT4_eg>;
>    defm CUBE_eg : CUBE_Common<0xC0>;
>  
> -  def DIV_eg : DIV_Common<RECIP_IEEE_eg>;
> +  defm DIV_eg : DIV_Common<RECIP_IEEE_eg>;
>    def POW_eg : POW_Common<LOG_IEEE_eg, EXP_IEEE_eg, MUL, GPRF32>;
>    def SSG_eg : SSG_Common<CNDGT_eg, CNDGE_eg>;
>    def TGSI_LIT_Z_eg : TGSI_LIT_Z_Common<MUL_LIT_eg, LOG_CLAMPED_eg, EXP_IEEE_eg>;
> -- 
> 1.7.11.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