From: Nicolai Hähnle Date: Fri, 22 Sep 2017 17:14:16 +0000 (+0200) Subject: amd/common: save an instruction in the build_cube_select sequence X-Git-Tag: upstream/18.1.0~5692 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a6ea4c1b9354ff5505ec637b080a7d6b63519bf1;p=platform%2Fupstream%2Fmesa.git amd/common: save an instruction in the build_cube_select sequence Avoid a v_cndmask: the absolute value is free due to input modifiers. Reviewed-by: Marek Olšák Tested-by: Dieter Nützel --- diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index 8c050f3..71468df 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -438,12 +438,13 @@ build_cube_intrinsic(struct ac_llvm_context *ctx, * selcoords.ma; i.e., a positive out_ma means that coords is pointed towards * the selcoords major axis. */ -static void build_cube_select(LLVMBuilderRef builder, +static void build_cube_select(struct ac_llvm_context *ctx, const struct cube_selection_coords *selcoords, const LLVMValueRef *coords, LLVMValueRef *out_st, LLVMValueRef *out_ma) { + LLVMBuilderRef builder = ctx->builder; LLVMTypeRef f32 = LLVMTypeOf(coords[0]); LLVMValueRef is_ma_positive; LLVMValueRef sgn_ma; @@ -480,9 +481,9 @@ static void build_cube_select(LLVMBuilderRef builder, /* Select ma */ tmp = LLVMBuildSelect(builder, is_ma_z, coords[2], LLVMBuildSelect(builder, is_ma_y, coords[1], coords[0], ""), ""); - sgn = LLVMBuildSelect(builder, is_ma_positive, - LLVMConstReal(f32, 2.0), LLVMConstReal(f32, -2.0), ""); - *out_ma = LLVMBuildFMul(builder, tmp, sgn, ""); + tmp = ac_build_intrinsic(ctx, "llvm.fabs.f32", + ctx->f32, &tmp, 1, AC_FUNC_ATTR_READNONE); + *out_ma = LLVMBuildFMul(builder, tmp, LLVMConstReal(f32, 2.0), ""); } void @@ -570,7 +571,7 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx, * seems awfully quiet about how textureGrad for cube * maps should be handled. */ - build_cube_select(builder, &selcoords, &derivs_arg[axis * 3], + build_cube_select(ctx, &selcoords, &derivs_arg[axis * 3], deriv_st, &deriv_ma); deriv_ma = LLVMBuildFMul(builder, deriv_ma, invma, "");