From: Marek Olšák <marek.ol...@amd.com>

The old function treats high values as negative, which LLVM interprets as 0.
---
 src/amd/common/ac_llvm_util.c            | 4 ++--
 src/amd/common/ac_llvm_util.h            | 2 +-
 src/gallium/drivers/radeonsi/si_shader.c | 7 +++++--
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
index b88c4e4..16b5ec3 100644
--- a/src/amd/common/ac_llvm_util.c
+++ b/src/amd/common/ac_llvm_util.c
@@ -193,17 +193,17 @@ void ac_add_func_attributes(LLVMContextRef ctx, 
LLVMValueRef function,
 void
 ac_dump_module(LLVMModuleRef module)
 {
        char *str = LLVMPrintModuleToString(module);
        fprintf(stderr, "%s", str);
        LLVMDisposeMessage(str);
 }
 
 void
 ac_llvm_add_target_dep_function_attr(LLVMValueRef F,
-                                    const char *name, int value)
+                                    const char *name, unsigned value)
 {
        char str[16];
 
-       snprintf(str, sizeof(str), "%i", value);
+       snprintf(str, sizeof(str), "0x%x", value);
        LLVMAddTargetDependentFunctionAttr(F, name, str);
 }
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index 3cf385a..3229524 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -80,21 +80,21 @@ void ac_add_func_attributes(LLVMContextRef ctx, 
LLVMValueRef function,
 void ac_dump_module(LLVMModuleRef module);
 
 LLVMValueRef ac_llvm_get_called_value(LLVMValueRef call);
 bool ac_llvm_is_function(LLVMValueRef v);
 
 LLVMBuilderRef ac_create_builder(LLVMContextRef ctx,
                                 enum ac_float_mode float_mode);
 
 void
 ac_llvm_add_target_dep_function_attr(LLVMValueRef F,
-                                    const char *name, int value);
+                                    const char *name, unsigned value);
 
 static inline unsigned
 ac_get_load_intr_attribs(bool can_speculate)
 {
        /* READNONE means writes can't affect it, while READONLY means that
         * writes can affect it. */
        return can_speculate ? AC_FUNC_ATTR_READNONE :
                               AC_FUNC_ATTR_READONLY;
 }
 
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 6be1806..60fc564 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -4411,22 +4411,25 @@ static void si_create_function(struct si_shader_context 
*ctx,
                        lp_add_function_attr(ctx->main_fn, i + 1, 
LP_FUNC_ATTR_NOALIAS);
                        ac_add_attr_dereferenceable(P, UINT64_MAX);
                }
        }
 
        for (i = 0; i < fninfo->num_params; ++i) {
                if (fninfo->assign[i])
                        *fninfo->assign[i] = LLVMGetParam(ctx->main_fn, i);
        }
 
-       si_llvm_add_attribute(ctx->main_fn, "amdgpu-32bit-address-high-bits",
-                             ctx->screen->info.address32_hi);
+       if (ctx->screen->info.address32_hi) {
+               ac_llvm_add_target_dep_function_attr(ctx->main_fn,
+                                                    
"amdgpu-32bit-address-high-bits",
+                                                    
ctx->screen->info.address32_hi);
+       }
 
        if (max_workgroup_size) {
                si_llvm_add_attribute(ctx->main_fn, 
"amdgpu-max-work-group-size",
                                      max_workgroup_size);
        }
        LLVMAddTargetDependentFunctionAttr(ctx->main_fn,
                                           "no-signed-zeros-fp-math",
                                           "true");
 
        if (ctx->screen->debug_flags & DBG(UNSAFE_MATH)) {
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to