From caf15ce67001f09e4258ac545b7ed655eb63211c Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Fri, 10 Nov 2017 13:55:48 +1100 Subject: ac: move build_varying_gather_values() to ac_llvm_build.h and expose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Nicolai Hähnle Reviewed-by: Marek Olšák --- src/amd/common/ac_llvm_build.c | 22 ++++++++++++++++++++++ src/amd/common/ac_llvm_build.h | 4 ++++ src/amd/common/ac_nir_to_llvm.c | 34 ++++++---------------------------- 3 files changed, 32 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index 5640a23b8aa..b2bf1bf7b51 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -370,6 +370,28 @@ ac_build_vote_eq(struct ac_llvm_context *ctx, LLVMValueRef value) return LLVMBuildOr(ctx->builder, all, none, ""); } +LLVMValueRef +ac_build_varying_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values, + unsigned value_count, unsigned component) +{ + LLVMValueRef vec = NULL; + + if (value_count == 1) { + return values[component]; + } else if (!value_count) + unreachable("value_count is 0"); + + for (unsigned i = component; i < value_count + component; i++) { + LLVMValueRef value = values[i]; + + if (!i) + vec = LLVMGetUndef( LLVMVectorType(LLVMTypeOf(value), value_count)); + LLVMValueRef index = LLVMConstInt(ctx->i32, i - component, false); + vec = LLVMBuildInsertElement(ctx->builder, vec, value, index, ""); + } + return vec; +} + LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMValueRef *values, diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h index 1f51937c9e1..655dc1dcc86 100644 --- a/src/amd/common/ac_llvm_build.h +++ b/src/amd/common/ac_llvm_build.h @@ -112,6 +112,10 @@ LLVMValueRef ac_build_vote_any(struct ac_llvm_context *ctx, LLVMValueRef value); LLVMValueRef ac_build_vote_eq(struct ac_llvm_context *ctx, LLVMValueRef value); +LLVMValueRef +ac_build_varying_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values, + unsigned value_count, unsigned component); + LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMValueRef *values, diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 8610e367158..db1936b3111 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -2704,28 +2704,6 @@ get_dw_address(struct nir_to_llvm_context *ctx, return dw_addr; } -static LLVMValueRef -build_varying_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values, - unsigned value_count, unsigned component) -{ - LLVMValueRef vec = NULL; - - if (value_count == 1) { - return values[component]; - } else if (!value_count) - unreachable("value_count is 0"); - - for (unsigned i = component; i < value_count + component; i++) { - LLVMValueRef value = values[i]; - - if (!i) - vec = LLVMGetUndef( LLVMVectorType(LLVMTypeOf(value), value_count)); - LLVMValueRef index = LLVMConstInt(ctx->i32, i - component, false); - vec = LLVMBuildInsertElement(ctx->builder, vec, value, index, ""); - } - return vec; -} - static LLVMValueRef load_tcs_input(struct nir_to_llvm_context *ctx, nir_intrinsic_instr *instr) @@ -2754,7 +2732,7 @@ load_tcs_input(struct nir_to_llvm_context *ctx, dw_addr = LLVMBuildAdd(ctx->builder, dw_addr, ctx->ac.i32_1, ""); } - result = build_varying_gather_values(&ctx->ac, value, instr->num_components, comp); + result = ac_build_varying_gather_values(&ctx->ac, value, instr->num_components, comp); result = LLVMBuildBitCast(ctx->builder, result, get_def_type(ctx->nir, &instr->dest.ssa), ""); return result; } @@ -2793,7 +2771,7 @@ load_tcs_output(struct nir_to_llvm_context *ctx, dw_addr = LLVMBuildAdd(ctx->builder, dw_addr, ctx->ac.i32_1, ""); } - result = build_varying_gather_values(&ctx->ac, value, instr->num_components, comp); + result = ac_build_varying_gather_values(&ctx->ac, value, instr->num_components, comp); result = LLVMBuildBitCast(ctx->builder, result, get_def_type(ctx->nir, &instr->dest.ssa), ""); return result; } @@ -2959,7 +2937,7 @@ load_gs_input(struct nir_to_llvm_context *ctx, AC_FUNC_ATTR_LEGACY); } } - result = build_varying_gather_values(&ctx->ac, value, instr->num_components, comp); + result = ac_build_varying_gather_values(&ctx->ac, value, instr->num_components, comp); return result; } @@ -3100,7 +3078,7 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx, default: unreachable("unhandle variable mode"); } - ret = build_varying_gather_values(&ctx->ac, values, ve, comp); + ret = ac_build_varying_gather_values(&ctx->ac, values, ve, comp); return LLVMBuildBitCast(ctx->ac.builder, ret, get_def_type(ctx, &instr->dest.ssa), ""); } @@ -3962,8 +3940,8 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx, ctx->prim_mask); } } - return build_varying_gather_values(&ctx->ac, result, instr->num_components, - instr->variables[0]->var->data.location_frac); + return ac_build_varying_gather_values(&ctx->ac, result, instr->num_components, + instr->variables[0]->var->data.location_frac); } static void -- cgit v1.2.3