radeonsi: add always-inline pass to si_llvm_finalize_module
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 28 Oct 2016 12:42:46 +0000 (14:42 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 3 Nov 2016 09:06:42 +0000 (10:06 +0100)
Change the pass manager as well, since this is a module-level pass. No
noticeable run-time difference on shader-db.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
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);