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