From 60beac9efcf40144c86fc85258e7a1bf5518d20f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 15 Aug 2018 20:50:03 -0400 Subject: [PATCH] ac,radeonsi: use ac_build_fmad Reviewed-by: Samuel Pitoiset --- src/amd/common/ac_llvm_build.c | 3 +-- src/amd/common/ac_nir_to_llvm.c | 7 ++----- src/gallium/drivers/radeonsi/si_shader.c | 17 +++++------------ 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index 6d5bfb1a1be..c741a1ab62d 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -762,8 +762,7 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx, if (is_array) { /* for cube arrays coord.z = coord.w(array_index) * 8 + face */ /* coords_arg.w component - array_index for cube arrays */ - LLVMValueRef tmp = LLVMBuildFMul(ctx->builder, coords_arg[3], LLVMConstReal(ctx->f32, 8.0), ""); - coords[2] = LLVMBuildFAdd(ctx->builder, tmp, coords[2], ""); + coords[2] = ac_build_fmad(ctx, coords_arg[3], LLVMConstReal(ctx->f32, 8.0), coords[2]); } memcpy(coords_arg, coords, sizeof(coords)); diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 1584fef7ab7..537ac33c044 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -2853,11 +2853,8 @@ static LLVMValueRef visit_interp(struct ac_nir_context *ctx, interp_el = LLVMBuildBitCast(ctx->ac.builder, interp_el, ctx->ac.f32, ""); - temp1 = LLVMBuildFMul(ctx->ac.builder, ddx_el, src_c0, ""); - temp1 = LLVMBuildFAdd(ctx->ac.builder, temp1, interp_el, ""); - - temp2 = LLVMBuildFMul(ctx->ac.builder, ddy_el, src_c1, ""); - temp2 = LLVMBuildFAdd(ctx->ac.builder, temp2, temp1, ""); + temp1 = ac_build_fmad(&ctx->ac, ddx_el, src_c0, interp_el); + temp2 = ac_build_fmad(&ctx->ac, ddy_el, src_c1, temp1); ij_out[i] = LLVMBuildBitCast(ctx->ac.builder, temp2, ctx->ac.i32, ""); diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 24ee45f578a..66fe5fad218 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2659,10 +2659,8 @@ static void si_llvm_emit_clipvertex(struct si_shader_context *ctx, const_chan) * 4, 0); base_elt = buffer_load_const(ctx, const_resource, addr); - args->out[chan] = - LLVMBuildFAdd(ctx->ac.builder, args->out[chan], - LLVMBuildFMul(ctx->ac.builder, base_elt, - out_elts[const_chan], ""), ""); + args->out[chan] = ac_build_fmad(&ctx->ac, base_elt, + out_elts[const_chan], args->out[chan]); } } @@ -4114,17 +4112,12 @@ static void build_interp_intrinsic(const struct lp_build_tgsi_action *action, ddxy_out, iy_ll, ""); LLVMValueRef interp_el = LLVMBuildExtractElement(ctx->ac.builder, interp_param, ix_ll, ""); - LLVMValueRef temp1, temp2; + LLVMValueRef temp; interp_el = ac_to_float(&ctx->ac, interp_el); - temp1 = LLVMBuildFMul(ctx->ac.builder, ddx_el, offset_x, ""); - - temp1 = LLVMBuildFAdd(ctx->ac.builder, temp1, interp_el, ""); - - temp2 = LLVMBuildFMul(ctx->ac.builder, ddy_el, offset_y, ""); - - ij_out[i] = LLVMBuildFAdd(ctx->ac.builder, temp2, temp1, ""); + temp = ac_build_fmad(&ctx->ac, ddx_el, offset_x, interp_el); + ij_out[i] = ac_build_fmad(&ctx->ac, ddy_el, offset_y, temp); } interp_param = ac_build_gather_values(&ctx->ac, ij_out, 2); } -- 2.30.2