[Mesa-dev] [PATCH] ac/nir/llvm: Fix setting function attributes for intrinsics

Daniel Scharrer daniel at constexpr.org
Fri Nov 11 20:36:36 UTC 2016


This fixes a NULL pointer dereference for intrinsics with more than
one function attribute introduced in commit 2fdaf38.
The fix is ported from the lp_build_intrinsic changes in commit 8bdd52c.
---

I'm a bit unsure about the index change from 0 to -1, but the gallium code does
this as well and without it all vulkan apps fail with:
 LLVM ERROR: Cannot select: target intrinsic %llvm.SI.vs.load.input

 src/amd/common/ac_nir_to_llvm.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index b7ccea8..aa2d488 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1675,7 +1675,11 @@ emit_llvm_intrinsic(struct nir_to_llvm_context *ctx, const char *name,
 		LLVMSetFunctionCallConv(function, LLVMCCallConv);
 		LLVMSetLinkage(function, LLVMExternalLinkage);
 
-		ac_add_function_attr(function, 0, attrib_mask | AC_FUNC_ATTR_NOUNWIND);
+		attrib_mask |= AC_FUNC_ATTR_NOUNWIND;
+		while (attrib_mask) {
+			enum ac_func_attr attr = 1u << u_bit_scan(&attrib_mask);
+			ac_add_function_attr(function, -1, attr);
+		}
 	}
 	return LLVMBuildCall(ctx->builder, function, params, param_count, "");
 }
-- 
2.10.2



More information about the mesa-dev mailing list