From: Nicolai Hähnle <nicolai.haeh...@amd.com>

... and eliminate emit_fdiv and nir_to_llvm_context::fpmath_md_*, which
are now unused.
---
 src/amd/common/ac_nir_to_llvm.c | 28 ++++++----------------------
 1 file changed, 6 insertions(+), 22 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 5fe9e8c..269c4bc 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -106,24 +106,22 @@ struct nir_to_llvm_context {
        LLVMTypeRef voidt;
 
        LLVMValueRef i32zero;
        LLVMValueRef i32one;
        LLVMValueRef f32zero;
        LLVMValueRef f32one;
        LLVMValueRef v4f32empty;
 
        unsigned range_md_kind;
        unsigned uniform_md_kind;
-       unsigned fpmath_md_kind;
        unsigned invariant_load_md_kind;
        LLVMValueRef empty_md;
-       LLVMValueRef fpmath_md_2p5_ulp;
        gl_shader_stage stage;
 
        LLVMValueRef lds;
        LLVMValueRef inputs[RADEON_LLVM_MAX_INPUTS * 4];
        LLVMValueRef outputs[RADEON_LLVM_MAX_OUTPUTS * 4];
 
        LLVMValueRef shared_memory;
        uint64_t input_mask;
        uint64_t output_mask;
        int num_locals;
@@ -576,24 +574,21 @@ static void setup_types(struct nir_to_llvm_context *ctx)
        ctx->v4f32empty = LLVMConstVector(args, 4);
 
        ctx->range_md_kind = LLVMGetMDKindIDInContext(ctx->context,
                                                      "range", 5);
        ctx->invariant_load_md_kind = LLVMGetMDKindIDInContext(ctx->context,
                                                               
"invariant.load", 14);
        ctx->uniform_md_kind =
            LLVMGetMDKindIDInContext(ctx->context, "amdgpu.uniform", 14);
        ctx->empty_md = LLVMMDNodeInContext(ctx->context, NULL, 0);
 
-       ctx->fpmath_md_kind = LLVMGetMDKindIDInContext(ctx->context, "fpmath", 
6);
-
        args[0] = LLVMConstReal(ctx->f32, 2.5);
-       ctx->fpmath_md_2p5_ulp = LLVMMDNodeInContext(ctx->context, args, 1);
 }
 
 static int get_llvm_num_components(LLVMValueRef value)
 {
        LLVMTypeRef type = LLVMTypeOf(value);
        unsigned num_components = LLVMGetTypeKind(type) == LLVMVectorTypeKind
                                      ? LLVMGetVectorSize(type)
                                      : 1;
        return num_components;
 }
@@ -1186,31 +1181,20 @@ static LLVMValueRef emit_ddxy_interp(
 
        for (i = 0; i < 2; i++) {
                a = LLVMBuildExtractElement(ctx->builder, interp_ij,
                                            LLVMConstInt(ctx->i32, i, false), 
"");
                result[i] = emit_ddxy(ctx, nir_op_fddx, a);
                result[2+i] = emit_ddxy(ctx, nir_op_fddy, a);
        }
        return ac_build_gather_values(&ctx->ac, result, 4);
 }
 
-static LLVMValueRef emit_fdiv(struct nir_to_llvm_context *ctx,
-                             LLVMValueRef num,
-                             LLVMValueRef den)
-{
-       LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
-
-       if (!LLVMIsConstant(ret))
-               LLVMSetMetadata(ret, ctx->fpmath_md_kind, 
ctx->fpmath_md_2p5_ulp);
-       return ret;
-}
-
 static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
 {
        LLVMValueRef src[4], result = NULL;
        unsigned num_components = instr->dest.dest.ssa.num_components;
        unsigned src_components;
 
        assert(nir_op_infos[instr->op].num_inputs <= ARRAY_SIZE(src));
        switch (instr->op) {
        case nir_op_vec2:
        case nir_op_vec3:
@@ -1266,21 +1250,21 @@ static void visit_alu(struct nir_to_llvm_context *ctx, 
nir_alu_instr *instr)
                break;
        case nir_op_imod:
                result = LLVMBuildSRem(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_umod:
                result = LLVMBuildURem(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_fmod:
                src[0] = to_float(ctx, src[0]);
                src[1] = to_float(ctx, src[1]);
-               result = emit_fdiv(ctx, src[0], src[1]);
+               result = ac_emit_fdiv(&ctx->ac, src[0], src[1]);
                result = emit_intrin_1f_param(ctx, "llvm.floor.f32", result);
                result = LLVMBuildFMul(ctx->builder, src[1] , result, "");
                result = LLVMBuildFSub(ctx->builder, src[0], result, "");
                break;
        case nir_op_frem:
                src[0] = to_float(ctx, src[0]);
                src[1] = to_float(ctx, src[1]);
                result = LLVMBuildFRem(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_idiv:
@@ -1290,25 +1274,25 @@ static void visit_alu(struct nir_to_llvm_context *ctx, 
nir_alu_instr *instr)
                result = LLVMBuildUDiv(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_fmul:
                src[0] = to_float(ctx, src[0]);
                src[1] = to_float(ctx, src[1]);
                result = LLVMBuildFMul(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_fdiv:
                src[0] = to_float(ctx, src[0]);
                src[1] = to_float(ctx, src[1]);
-               result = emit_fdiv(ctx, src[0], src[1]);
+               result = ac_emit_fdiv(&ctx->ac, src[0], src[1]);
                break;
        case nir_op_frcp:
                src[0] = to_float(ctx, src[0]);
-               result = emit_fdiv(ctx, ctx->f32one, src[0]);
+               result = ac_emit_fdiv(&ctx->ac, ctx->f32one, src[0]);
                break;
        case nir_op_iand:
                result = LLVMBuildAnd(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_ior:
                result = LLVMBuildOr(ctx->builder, src[0], src[1], "");
                break;
        case nir_op_ixor:
                result = LLVMBuildXor(ctx->builder, src[0], src[1], "");
                break;
@@ -1401,21 +1385,21 @@ static void visit_alu(struct nir_to_llvm_context *ctx, 
nir_alu_instr *instr)
                result = emit_intrin_1f_param(ctx, "llvm.sqrt.f32", src[0]);
                break;
        case nir_op_fexp2:
                result = emit_intrin_1f_param(ctx, "llvm.exp2.f32", src[0]);
                break;
        case nir_op_flog2:
                result = emit_intrin_1f_param(ctx, "llvm.log2.f32", src[0]);
                break;
        case nir_op_frsq:
                result = emit_intrin_1f_param(ctx, "llvm.sqrt.f32", src[0]);
-               result = emit_fdiv(ctx, ctx->f32one, result);
+               result = ac_emit_fdiv(&ctx->ac, ctx->f32one, result);
                break;
        case nir_op_fpow:
                result = emit_intrin_2f_param(ctx, "llvm.pow.f32", src[0], 
src[1]);
                break;
        case nir_op_fmax:
                result = emit_intrin_2f_param(ctx, "llvm.maxnum.f32", src[0], 
src[1]);
                break;
        case nir_op_fmin:
                result = emit_intrin_2f_param(ctx, "llvm.minnum.f32", src[0], 
src[1]);
                break;
@@ -1630,21 +1614,21 @@ static LLVMValueRef radv_lower_gather4_integer(struct 
nir_to_llvm_context *ctx,
                txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* 
tfe */
                txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* 
lwe */
                size = ac_emit_llvm_intrinsic(&ctx->ac, 
"llvm.SI.getresinfo.i32", ctx->v4i32,
                                           txq_args, txq_arg_count,
                                           AC_FUNC_ATTR_READNONE);
 
                for (c = 0; c < 2; c++) {
                        half_texel[c] = LLVMBuildExtractElement(ctx->builder, 
size,
                                                                
LLVMConstInt(ctx->i32, c, false), "");
                        half_texel[c] = LLVMBuildUIToFP(ctx->builder, 
half_texel[c], ctx->f32, "");
-                       half_texel[c] = emit_fdiv(ctx, ctx->f32one, 
half_texel[c]);
+                       half_texel[c] = ac_emit_fdiv(&ctx->ac, ctx->f32one, 
half_texel[c]);
                        half_texel[c] = LLVMBuildFMul(ctx->builder, 
half_texel[c],
                                                      LLVMConstReal(ctx->f32, 
-0.5), "");
                }
        }
 
        for (c = 0; c < 2; c++) {
                LLVMValueRef tmp;
                LLVMValueRef index = LLVMConstInt(ctx->i32, coord_vgpr_index + 
c, 0);
                tmp = LLVMBuildExtractElement(ctx->builder, coord, index, "");
                tmp = LLVMBuildBitCast(ctx->builder, tmp, ctx->f32, "");
@@ -3815,21 +3799,21 @@ handle_fs_inputs_pre(struct nir_to_llvm_context *ctx,
                        interp_fs_input(ctx, index, interp_param, 
ctx->prim_mask,
                                        inputs);
 
                        if (!interp_param)
                                ctx->shader_info->fs.flat_shaded_mask |= 1u << 
index;
                        ++index;
                } else if (i == VARYING_SLOT_POS) {
                        for(int i = 0; i < 3; ++i)
                                inputs[i] = ctx->frag_pos[i];
 
-                       inputs[3] = emit_fdiv(ctx, ctx->f32one, 
ctx->frag_pos[3]);
+                       inputs[3] = ac_emit_fdiv(&ctx->ac, ctx->f32one, 
ctx->frag_pos[3]);
                }
        }
        ctx->shader_info->fs.num_interp = index;
        if (ctx->input_mask & (1 << VARYING_SLOT_PNTC))
                ctx->shader_info->fs.has_pcoord = true;
        ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
 }
 
 static LLVMValueRef
 ac_build_alloca(struct nir_to_llvm_context *ctx,
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to