radeonsi: add always-inline pass to si_llvm_finalize_module
[mesa.git] / src / gallium / drivers / radeonsi / si_shader_tgsi_setup.c
index c7a08cc72cbdc118f338b2008d420e713766ae06..2d82574690ced625f3b26a7a9dbf92e3f286299f 100644 (file)
@@ -38,6 +38,7 @@
 #include "util/u_debug.h"
 
 #include <stdio.h>
+#include <llvm-c/Transforms/IPO.h>
 #include <llvm-c/Transforms/Scalar.h>
 
 /* Data for if/else/endif and bgnloop/endloop control flow structures.
@@ -1333,8 +1334,7 @@ void si_llvm_finalize_module(struct si_shader_context *ctx,
        LLVMTargetLibraryInfoRef target_library_info;
 
        /* Create the pass manager */
-       gallivm->passmgr = LLVMCreateFunctionPassManagerForModule(
-                                                       gallivm->module);
+       gallivm->passmgr = LLVMCreatePassManager();
 
        target_library_info = gallivm_create_target_library_info(triple);
        LLVMAddTargetLibraryInfo(target_library_info, gallivm->passmgr);
@@ -1342,6 +1342,8 @@ void si_llvm_finalize_module(struct si_shader_context *ctx,
        if (run_verifier)
                LLVMAddVerifierPass(gallivm->passmgr);
 
+       LLVMAddAlwaysInlinerPass(gallivm->passmgr);
+
        /* This pass should eliminate all the load and store instructions */
        LLVMAddPromoteMemoryToRegisterPass(gallivm->passmgr);
 
@@ -1353,9 +1355,7 @@ void si_llvm_finalize_module(struct si_shader_context *ctx,
        LLVMAddInstructionCombiningPass(gallivm->passmgr);
 
        /* Run the pass */
-       LLVMInitializeFunctionPassManager(gallivm->passmgr);
-       LLVMRunFunctionPassManager(gallivm->passmgr, ctx->main_fn);
-       LLVMFinalizeFunctionPassManager(gallivm->passmgr);
+       LLVMRunPassManager(gallivm->passmgr, ctx->gallivm.module);
 
        LLVMDisposeBuilder(gallivm->builder);
        LLVMDisposePassManager(gallivm->passmgr);