ac: create the LLVM module for Wave32 or Wave64 in ac_llvm_context_init
authorMarek Olšák <marek.olsak@amd.com>
Fri, 12 Jul 2019 21:32:18 +0000 (17:32 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 20 Jul 2019 00:16:19 +0000 (20:16 -0400)
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/common/ac_llvm_build.c
src/amd/common/ac_llvm_build.h
src/amd/vulkan/radv_nir_to_llvm.c
src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c

index 1551df0795913166dfcfedfed04ca08f5423fb70..4465acbd0ad808884a7ba0fc03fdf82ddd6628e9 100644 (file)
@@ -58,6 +58,7 @@ struct ac_llvm_flow {
  */
 void
 ac_llvm_context_init(struct ac_llvm_context *ctx,
+                    struct ac_llvm_compiler *compiler,
                     enum chip_class chip_class, enum radeon_family family,
                     unsigned wave_size)
 {
@@ -68,7 +69,9 @@ ac_llvm_context_init(struct ac_llvm_context *ctx,
        ctx->chip_class = chip_class;
        ctx->family = family;
        ctx->wave_size = wave_size;
-       ctx->module = NULL;
+       ctx->module = ac_create_module(wave_size == 32 ? compiler->tm_wave32
+                                                      : compiler->tm,
+                                      ctx->context);
        ctx->builder = NULL;
 
        ctx->voidt = LLVMVoidTypeInContext(ctx->context);
index 588ef242c20b82db4fe8d49e6e919f0bdecc6960..9efd755b90be1d21c7d7573f189bf3e0bf6f0311 100644 (file)
@@ -48,6 +48,7 @@ enum {
 #define AC_WAIT_VSTORE (1 << 2) /* VMEM store instructions */
 
 struct ac_llvm_flow;
+struct ac_llvm_compiler;
 
 struct ac_llvm_context {
        LLVMContextRef context;
@@ -110,6 +111,7 @@ struct ac_llvm_context {
 
 void
 ac_llvm_context_init(struct ac_llvm_context *ctx,
+                    struct ac_llvm_compiler *compiler,
                     enum chip_class chip_class, enum radeon_family family,
                     unsigned wave_size);
 
index a18718ef081613d2c120d5cde3ac4f312de7baf8..0c739e1ebd9a0815405cda067a3ef6832ad25db8 100644 (file)
@@ -4319,9 +4319,8 @@ LLVMModuleRef ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
        ctx.options = options;
        ctx.shader_info = shader_info;
 
-       ac_llvm_context_init(&ctx.ac, options->chip_class, options->family, 64);
+       ac_llvm_context_init(&ctx.ac, ac_llvm, options->chip_class, options->family, 64);
        ctx.context = ctx.ac.context;
-       ctx.ac.module = ac_create_module(ac_llvm->tm, ctx.context);
 
        enum ac_float_mode float_mode =
                options->unsafe_math ? AC_FLOAT_MODE_UNSAFE_FP_MATH :
@@ -4838,9 +4837,8 @@ radv_compile_gs_copy_shader(struct ac_llvm_compiler *ac_llvm,
        ctx.options = options;
        ctx.shader_info = shader_info;
 
-       ac_llvm_context_init(&ctx.ac, options->chip_class, options->family, 64);
+       ac_llvm_context_init(&ctx.ac, ac_llvm, options->chip_class, options->family, 64);
        ctx.context = ctx.ac.context;
-       ctx.ac.module = ac_create_module(ac_llvm->tm, ctx.context);
 
        ctx.is_gs_copy_shader = true;
 
index 9a9f3d63cc6c6bf64c5d424749df29599934eab8..3de720c27b8541f707a1a31780194fcf1d795b99 100644 (file)
@@ -962,8 +962,8 @@ void si_llvm_context_init(struct si_shader_context *ctx,
        ctx->screen = sscreen;
        ctx->compiler = compiler;
 
-       ac_llvm_context_init(&ctx->ac, sscreen->info.chip_class, sscreen->info.family, 64);
-       ctx->ac.module = ac_create_module(compiler->tm, ctx->ac.context);
+       ac_llvm_context_init(&ctx->ac, compiler, sscreen->info.chip_class,
+                            sscreen->info.family, 64);
 
        enum ac_float_mode float_mode =
                sscreen->debug_flags & DBG(UNSAFE_MATH) ?