diff options
author | Connor Abbott <cwabbott0@gmail.com> | 2017-06-05 14:37:01 -0700 |
---|---|---|
committer | Connor Abbott <cwabbott0@gmail.com> | 2017-08-08 12:05:25 -0700 |
commit | b056e45836cbbcd9f9a7a2511b12066379dcf4b2 (patch) | |
tree | 0b9c22a605358998922228af859e25719a9a4fe5 | |
parent | f3c38e980f4eebb7cf451d92345f64e6b0fb9d38 (diff) |
radeonsi: move llvm_get_type_size() to ac
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r-- | src/amd/common/ac_llvm_build.c | 24 | ||||
-rw-r--r-- | src/amd/common/ac_llvm_build.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 43 |
3 files changed, 35 insertions, 34 deletions
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index a38aad68f7..2503608e26 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -88,6 +88,30 @@ ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context) ctx->empty_md = LLVMMDNodeInContext(ctx->context, NULL, 0); } +unsigned +ac_get_type_size(LLVMTypeRef type) +{ + LLVMTypeKind kind = LLVMGetTypeKind(type); + + switch (kind) { + case LLVMIntegerTypeKind: + return LLVMGetIntTypeWidth(type) / 8; + case LLVMFloatTypeKind: + return 4; + case LLVMPointerTypeKind: + return 8; + case LLVMVectorTypeKind: + return LLVMGetVectorSize(type) * + ac_get_type_size(LLVMGetElementType(type)); + case LLVMArrayTypeKind: + return LLVMGetArrayLength(type) * + ac_get_type_size(LLVMGetElementType(type)); + default: + assert(0); + return 0; + } +} + LLVMValueRef ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name, LLVMTypeRef return_type, LLVMValueRef *params, diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h index ee27d3ca25..cbc938d5a0 100644 --- a/src/amd/common/ac_llvm_build.h +++ b/src/amd/common/ac_llvm_build.h @@ -66,6 +66,8 @@ struct ac_llvm_context { void ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context); +unsigned ac_get_type_size(LLVMTypeRef type); + LLVMValueRef ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name, LLVMTypeRef return_type, LLVMValueRef *params, diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 09053c355e..1124947885 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -89,8 +89,6 @@ static void si_llvm_emit_barrier(const struct lp_build_tgsi_action *action, static void si_dump_shader_key(unsigned processor, const struct si_shader *shader, FILE *f); -static unsigned llvm_get_type_size(LLVMTypeRef type); - static void si_build_vs_prolog_function(struct si_shader_context *ctx, union si_shader_part_key *key); static void si_build_tcs_epilog_function(struct si_shader_context *ctx, @@ -3491,7 +3489,7 @@ static void emit_optimization_barrier(struct si_shader_context *ctx, LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, "=v,0", true, false); LLVMValueRef vgpr = *pvgpr; LLVMTypeRef vgpr_type = LLVMTypeOf(vgpr); - unsigned vgpr_size = llvm_get_type_size(vgpr_type); + unsigned vgpr_size = ac_get_type_size(vgpr_type); LLVMValueRef vgpr0; assert(vgpr_size % 4 == 0); @@ -4159,29 +4157,6 @@ static void declare_streamout_params(struct si_shader_context *ctx, } } -static unsigned llvm_get_type_size(LLVMTypeRef type) -{ - LLVMTypeKind kind = LLVMGetTypeKind(type); - - switch (kind) { - case LLVMIntegerTypeKind: - return LLVMGetIntTypeWidth(type) / 8; - case LLVMFloatTypeKind: - return 4; - case LLVMPointerTypeKind: - return 8; - case LLVMVectorTypeKind: - return LLVMGetVectorSize(type) * - llvm_get_type_size(LLVMGetElementType(type)); - case LLVMArrayTypeKind: - return LLVMGetArrayLength(type) * - llvm_get_type_size(LLVMGetElementType(type)); - default: - assert(0); - return 0; - } -} - static void declare_lds_as_pointer(struct si_shader_context *ctx) { struct gallivm_state *gallivm = &ctx->gallivm; @@ -4627,10 +4602,10 @@ static void create_function(struct si_shader_context *ctx) shader->info.num_input_vgprs = 0; for (i = 0; i < fninfo.num_sgpr_params; ++i) - shader->info.num_input_sgprs += llvm_get_type_size(fninfo.types[i]) / 4; + shader->info.num_input_sgprs += ac_get_type_size(fninfo.types[i]) / 4; for (; i < fninfo.num_params; ++i) - shader->info.num_input_vgprs += llvm_get_type_size(fninfo.types[i]) / 4; + shader->info.num_input_vgprs += ac_get_type_size(fninfo.types[i]) / 4; assert(shader->info.num_input_vgprs >= num_prolog_vgprs); shader->info.num_input_vgprs -= num_prolog_vgprs; @@ -5583,7 +5558,7 @@ static void si_count_scratch_private_memory(struct si_shader_context *ctx) LLVMTypeRef type = LLVMGetElementType(LLVMTypeOf(inst)); /* No idea why LLVM aligns allocas to 4 elements. */ unsigned alignment = LLVMGetAlignment(inst); - unsigned dw_size = align(llvm_get_type_size(type) / 4, alignment); + unsigned dw_size = align(ac_get_type_size(type) / 4, alignment); ctx->shader->config.private_mem_vgprs += dw_size; } bb = LLVMGetNextBasicBlock(bb); @@ -6098,9 +6073,9 @@ static void si_build_wrapper_function(struct si_shader_context *ctx, if (ac_is_sgpr_param(param)) { assert(num_vgprs == 0); - num_sgprs += llvm_get_type_size(LLVMTypeOf(param)) / 4; + num_sgprs += ac_get_type_size(LLVMTypeOf(param)) / 4; } else { - num_vgprs += llvm_get_type_size(LLVMTypeOf(param)) / 4; + num_vgprs += ac_get_type_size(LLVMTypeOf(param)) / 4; } } @@ -6108,7 +6083,7 @@ static void si_build_wrapper_function(struct si_shader_context *ctx, while (gprs < num_sgprs + num_vgprs) { LLVMValueRef param = LLVMGetParam(parts[main_part], fninfo.num_params); LLVMTypeRef type = LLVMTypeOf(param); - unsigned size = llvm_get_type_size(type) / 4; + unsigned size = ac_get_type_size(type) / 4; add_arg(&fninfo, gprs < num_sgprs ? ARG_SGPR : ARG_VGPR, type); @@ -6135,7 +6110,7 @@ static void si_build_wrapper_function(struct si_shader_context *ctx, LLVMValueRef param = LLVMGetParam(ctx->main_fn, i); LLVMTypeRef param_type = LLVMTypeOf(param); LLVMTypeRef out_type = i < fninfo.num_sgpr_params ? ctx->i32 : ctx->f32; - unsigned size = llvm_get_type_size(param_type) / 4; + unsigned size = ac_get_type_size(param_type) / 4; if (size == 1) { if (param_type != out_type) @@ -6197,7 +6172,7 @@ static void si_build_wrapper_function(struct si_shader_context *ctx, param = LLVMGetParam(parts[part], param_idx); param_type = LLVMTypeOf(param); - param_size = llvm_get_type_size(param_type) / 4; + param_size = ac_get_type_size(param_type) / 4; is_sgpr = ac_is_sgpr_param(param); if (is_sgpr) { |