Mesa (master): radv: set noalias/dereferenceable LLVM attributes based on param types

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jan 28 15:30:04 UTC 2019


Module: Mesa
Branch: master
Commit: afeef3cacf35376a0c31f0871b57628cafd90ccb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=afeef3cacf35376a0c31f0871b57628cafd90ccb

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Jan 25 09:21:33 2019 +0100

radv: set noalias/dereferenceable LLVM attributes based on param types

Instead of using this useless array_params_mask variable.
This should set these two attributes to streamout buffers too.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_nir_to_llvm.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c
index 690be94748..e80938527e 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -433,7 +433,6 @@ get_tcs_out_current_patch_data_offset(struct radv_shader_context *ctx)
 struct arg_info {
 	LLVMTypeRef types[MAX_ARGS];
 	LLVMValueRef *assign[MAX_ARGS];
-	unsigned array_params_mask;
 	uint8_t count;
 	uint8_t sgpr_count;
 	uint8_t num_sgprs_used;
@@ -464,13 +463,6 @@ add_arg(struct arg_info *info, enum ac_arg_regfile regfile, LLVMTypeRef type,
 	}
 }
 
-static inline void
-add_array_arg(struct arg_info *info, LLVMTypeRef type, LLVMValueRef *param_ptr)
-{
-	info->array_params_mask |= (1 << info->count);
-	add_arg(info, ARG_SGPR, type, param_ptr);
-}
-
 static void assign_arguments(LLVMValueRef main_function,
 			     struct arg_info *info)
 {
@@ -509,10 +501,11 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef module,
 
 	LLVMSetFunctionCallConv(main_function, RADEON_LLVM_AMDGPU_CS);
 	for (unsigned i = 0; i < args->sgpr_count; ++i) {
+		LLVMValueRef P = LLVMGetParam(main_function, i);
+
 		ac_add_function_attr(ctx, main_function, i + 1, AC_FUNC_ATTR_INREG);
 
-		if (args->array_params_mask & (1 << i)) {
-			LLVMValueRef P = LLVMGetParam(main_function, i);
+		if (LLVMGetTypeKind(LLVMTypeOf(P)) == LLVMPointerTypeKind) {
 			ac_add_function_attr(ctx, main_function, i + 1, AC_FUNC_ATTR_NOALIAS);
 			ac_add_attr_dereferenceable(P, UINT64_MAX);
 		}
@@ -726,15 +719,16 @@ declare_global_input_sgprs(struct radv_shader_context *ctx,
 		while (mask) {
 			int i = u_bit_scan(&mask);
 
-			add_array_arg(args, type, &ctx->descriptor_sets[i]);
+			add_arg(args, ARG_SGPR, type, &ctx->descriptor_sets[i]);
 		}
 	} else {
-		add_array_arg(args, ac_array_in_const32_addr_space(type), desc_sets);
+		add_arg(args, ARG_SGPR, ac_array_in_const32_addr_space(type),
+			desc_sets);
 	}
 
 	if (ctx->shader_info->info.loads_push_constants) {
 		/* 1 for push constants and dynamic descriptors */
-		add_array_arg(args, type, &ctx->abi.push_constants);
+		add_arg(args, ARG_SGPR, type, &ctx->abi.push_constants);
 	}
 
 	if (ctx->shader_info->info.so.num_outputs) {




More information about the mesa-commit mailing list