radv: create/destroy passmgr at the higher level.
authorDave Airlie <airlied@redhat.com>
Tue, 26 Jun 2018 23:11:47 +0000 (09:11 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 3 Jul 2018 19:31:05 +0000 (05:31 +1000)
This is prep work for moving this to a per-thread struct

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/vulkan/radv_nir_to_llvm.c
src/amd/vulkan/radv_private.h
src/amd/vulkan/radv_shader.c

index dbbf2c13d6688ff777e7564dd7ff99cb9c6efdb5..9cd29e257fb743594bc578d89baa5e50628698b5 100644 (file)
@@ -2993,15 +2993,11 @@ handle_shader_outputs_post(struct ac_shader_abi *abi, unsigned max_outputs,
 }
 
 static void ac_llvm_finalize_module(struct radv_shader_context *ctx,
+                                   LLVMPassManagerRef passmgr,
                                    const struct radv_nir_compiler_options *options)
 {
-       LLVMPassManagerRef passmgr;
-
-       passmgr = ac_create_passmgr(NULL, options->check_ir);
-
        LLVMRunPassManager(passmgr, ctx->ac.module);
        LLVMDisposeBuilder(ctx->ac.builder);
-       LLVMDisposePassManager(passmgr);
 
        ac_llvm_context_dispose(&ctx->ac);
 }
@@ -3132,6 +3128,7 @@ static void prepare_gs_input_vgprs(struct radv_shader_context *ctx)
 
 static
 LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
+                                       LLVMPassManagerRef passmgr,
                                        struct nir_shader *const *shaders,
                                        int shader_count,
                                        struct radv_shader_variant_info *shader_info,
@@ -3300,7 +3297,7 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
        if (options->dump_preoptir)
                ac_dump_module(ctx.ac.module);
 
-       ac_llvm_finalize_module(&ctx, options);
+       ac_llvm_finalize_module(&ctx, passmgr, options);
 
        if (shader_count == 1)
                ac_nir_eliminate_const_vs_outputs(&ctx);
@@ -3501,6 +3498,7 @@ ac_fill_shader_info(struct radv_shader_variant_info *shader_info, struct nir_sha
 
 void
 radv_compile_nir_shader(LLVMTargetMachineRef tm,
+                       LLVMPassManagerRef passmgr,
                        struct ac_shader_binary *binary,
                        struct ac_shader_config *config,
                        struct radv_shader_variant_info *shader_info,
@@ -3511,7 +3509,7 @@ radv_compile_nir_shader(LLVMTargetMachineRef tm,
 
        LLVMModuleRef llvm_module;
 
-       llvm_module = ac_translate_nir_to_llvm(tm, nir, nir_count, shader_info,
+       llvm_module = ac_translate_nir_to_llvm(tm, passmgr, nir, nir_count, shader_info,
                                               options);
 
        ac_compile_llvm_module(tm, llvm_module, binary, config, shader_info,
@@ -3573,6 +3571,7 @@ ac_gs_copy_shader_emit(struct radv_shader_context *ctx)
 
 void
 radv_compile_gs_copy_shader(LLVMTargetMachineRef tm,
+                           LLVMPassManagerRef passmgr,
                            struct nir_shader *geom_shader,
                            struct ac_shader_binary *binary,
                            struct ac_shader_config *config,
@@ -3617,7 +3616,7 @@ radv_compile_gs_copy_shader(LLVMTargetMachineRef tm,
 
        LLVMBuildRetVoid(ctx.ac.builder);
 
-       ac_llvm_finalize_module(&ctx, options);
+       ac_llvm_finalize_module(&ctx, passmgr, options);
 
        ac_compile_llvm_module(tm, ctx.ac.module, binary, config, shader_info,
                               MESA_SHADER_VERTEX, options);
index df335b43d8d9137488438d9acb2e52a8cc98b288..cf416fbe8f6677b5fb730f9546d7fb44c9fa30b9 100644 (file)
@@ -1796,6 +1796,7 @@ struct radv_shader_variant_info;
 struct radv_nir_compiler_options;
 
 void radv_compile_gs_copy_shader(LLVMTargetMachineRef tm,
+                                LLVMPassManagerRef passmgr,
                                 struct nir_shader *geom_shader,
                                 struct ac_shader_binary *binary,
                                 struct ac_shader_config *config,
@@ -1803,6 +1804,7 @@ void radv_compile_gs_copy_shader(LLVMTargetMachineRef tm,
                                 const struct radv_nir_compiler_options *option);
 
 void radv_compile_nir_shader(LLVMTargetMachineRef tm,
+                            LLVMPassManagerRef passmgr,
                             struct ac_shader_binary *binary,
                             struct ac_shader_config *config,
                             struct radv_shader_variant_info *shader_info,
index d53a500fe61e5d77cb0e97a185e0a4c1b5d82a98..62225baf81e948db60f7d6553d8f42f320daf61f 100644 (file)
@@ -542,6 +542,7 @@ shader_variant_create(struct radv_device *device,
        struct radv_shader_variant *variant;
        struct ac_shader_binary binary;
        LLVMTargetMachineRef tm;
+       LLVMPassManagerRef passmgr;
 
        variant = calloc(1, sizeof(struct radv_shader_variant));
        if (!variant)
@@ -564,17 +565,19 @@ shader_variant_create(struct radv_device *device,
 
        radv_init_llvm_once();
        tm = ac_create_target_machine(chip_family, tm_options, NULL);
+       passmgr = ac_create_passmgr(NULL, options->check_ir);
        if (gs_copy_shader) {
                assert(shader_count == 1);
-               radv_compile_gs_copy_shader(tm, *shaders, &binary,
+               radv_compile_gs_copy_shader(tm, passmgr, *shaders, &binary,
                                            &variant->config, &variant->info,
                                            options);
        } else {
-               radv_compile_nir_shader(tm, &binary, &variant->config,
+               radv_compile_nir_shader(tm, passmgr, &binary, &variant->config,
                                        &variant->info, shaders, shader_count,
                                        options);
        }
 
+       LLVMDisposePassManager(passmgr);
        LLVMDisposeTargetMachine(tm);
 
        radv_fill_shader_variant(device, variant, &binary, stage);