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@amd.com>
This commit is contained in:
parent
11e9ebbf15
commit
e0cc0a614c
|
@ -1256,6 +1256,8 @@ void si_llvm_context_init(struct si_shader_context *ctx,
|
||||||
const struct tgsi_token *tokens)
|
const struct tgsi_token *tokens)
|
||||||
{
|
{
|
||||||
struct lp_type type;
|
struct lp_type type;
|
||||||
|
LLVMTargetDataRef data_layout = LLVMCreateTargetDataLayout(tm);
|
||||||
|
char *data_layout_str = LLVMCopyStringRepOfTargetData(data_layout);
|
||||||
|
|
||||||
/* Initialize the gallivm object:
|
/* Initialize the gallivm object:
|
||||||
* We are only using the module, context, and builder fields of this struct.
|
* 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);
|
ctx->gallivm.context);
|
||||||
LLVMSetTarget(ctx->gallivm.module, "amdgcn--");
|
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;
|
bool unsafe_fpmath = (sscreen->b.debug_flags & DBG_UNSAFE_MATH) != 0;
|
||||||
ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context,
|
ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context,
|
||||||
unsafe_fpmath);
|
unsafe_fpmath);
|
||||||
|
|
Loading…
Reference in New Issue