On Tue, Jul 28, 2015 at 12:05:43PM +0200, Marek Olšák wrote:
> From: Marek Olšák <marek.ol...@amd.com>
> 
> There are 2 reasons for this:
> - LLVM optimization passes can work with floor
> - there are patterns to select v_fract from floor anyway
> 
> There is no change in the generated code.
> ---
>  src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c 
> b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
> index 319380f..5c08cf5 100644
> --- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
> +++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
> @@ -1170,6 +1170,20 @@ static void emit_dneg(
>                       emit_data->args[0], "");
>  }
>  
> +static void emit_frac(
> +             const struct lp_build_tgsi_action * action,
> +             struct lp_build_tgsi_context * bld_base,
> +             struct lp_build_emit_data * emit_data)
> +{
> +     LLVMBuilderRef builder = bld_base->base.gallivm->builder;
> +
> +     LLVMValueRef floor = lp_build_intrinsic(builder, "floor", 
> emit_data->dst_type,

The intrinsics name should be "llvm.floor.f32" for float and "llvm.floor.f64"
for double.

With that fixed, this is:
Reviewed-by: Tom Stellard <thomas.stell...@amd.com>

> +                                             &emit_data->args[0], 1,
> +                                             LLVMReadNoneAttribute);
> +     emit_data->output[emit_data->chan] = LLVMBuildFSub(builder,
> +                     emit_data->args[0], floor, "");
> +}
> +
>  static void emit_f2i(
>               const struct lp_build_tgsi_action * action,
>               struct lp_build_tgsi_context * bld_base,
> @@ -1432,8 +1446,7 @@ void radeon_llvm_context_init(struct 
> radeon_llvm_context * ctx)
>       bld_base->op_actions[TGSI_OPCODE_DABS].intr_name = "fabs";
>       bld_base->op_actions[TGSI_OPCODE_DFMA].emit = 
> build_tgsi_intrinsic_nomem;
>       bld_base->op_actions[TGSI_OPCODE_DFMA].intr_name = "llvm.fma.f64";
> -     bld_base->op_actions[TGSI_OPCODE_DFRAC].emit = 
> build_tgsi_intrinsic_nomem;
> -     bld_base->op_actions[TGSI_OPCODE_DFRAC].intr_name = 
> "llvm.AMDIL.fraction.";
> +     bld_base->op_actions[TGSI_OPCODE_DFRAC].emit = emit_frac;
>       bld_base->op_actions[TGSI_OPCODE_DNEG].emit = emit_dneg;
>       bld_base->op_actions[TGSI_OPCODE_DSEQ].emit = emit_dcmp;
>       bld_base->op_actions[TGSI_OPCODE_DSGE].emit = emit_dcmp;
> @@ -1452,8 +1465,7 @@ void radeon_llvm_context_init(struct 
> radeon_llvm_context * ctx)
>       bld_base->op_actions[TGSI_OPCODE_FLR].intr_name = "floor";
>       bld_base->op_actions[TGSI_OPCODE_FMA].emit = build_tgsi_intrinsic_nomem;
>       bld_base->op_actions[TGSI_OPCODE_FMA].intr_name = "llvm.fma.f32";
> -     bld_base->op_actions[TGSI_OPCODE_FRC].emit = build_tgsi_intrinsic_nomem;
> -     bld_base->op_actions[TGSI_OPCODE_FRC].intr_name = 
> "llvm.AMDIL.fraction.";
> +     bld_base->op_actions[TGSI_OPCODE_FRC].emit = emit_frac;
>       bld_base->op_actions[TGSI_OPCODE_F2I].emit = emit_f2i;
>       bld_base->op_actions[TGSI_OPCODE_F2U].emit = emit_f2u;
>       bld_base->op_actions[TGSI_OPCODE_FSEQ].emit = emit_fcmp;
> -- 
> 2.1.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to