Mesa (master): radeonsi: Set datalayout on the llvm module

Tom Stellard tstellar at kemper.freedesktop.org
Tue Jan 31 20:41:48 UTC 2017


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

Author: Tom Stellard <thomas.stellard at amd.com>
Date:   Thu Dec 15 15:25:49 2016 +0000

radeonsi: Set datalayout on the llvm module

This prevents LLVM from using sext instructions for local memory offsets
and allows the backend to fold immediate offsets into the instruction.

This also prevents some incorrect code generation for ptrtoint and
inttoptr instructions.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
index 4f355e5..205686a 100644
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
@@ -1256,6 +1256,8 @@ void si_llvm_context_init(struct si_shader_context *ctx,
 			  const struct tgsi_token *tokens)
 {
 	struct lp_type type;
+	LLVMTargetDataRef data_layout = LLVMCreateTargetDataLayout(tm);
+	char *data_layout_str = LLVMCopyStringRepOfTargetData(data_layout);
 
 	/* Initialize the gallivm object:
 	 * We are only using the module, context, and builder fields of this struct.
@@ -1273,6 +1275,10 @@ void si_llvm_context_init(struct si_shader_context *ctx,
 						ctx->gallivm.context);
 	LLVMSetTarget(ctx->gallivm.module, "amdgcn--");
 
+	LLVMSetDataLayout(ctx->gallivm.module, data_layout_str);
+	LLVMDisposeTargetData(data_layout);
+	LLVMDisposeMessage(data_layout_str);
+
 	bool unsafe_fpmath = (sscreen->b.debug_flags & DBG_UNSAFE_MATH) != 0;
 	ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context,
 						 unsafe_fpmath);




More information about the mesa-commit mailing list