[Mesa-dev] [PATCH 03/11] ac/radeonsi: refactor out pass manager init to common code.

Marek Olšák maraeo at gmail.com
Tue Jul 3 17:08:04 UTC 2018


s/init/create/ ?

Anyway, patch 1-3:
Reviewed-by: Marek Olšák <marek.olsak at amd.com>

On Mon, Jul 2, 2018, 8:48 PM Dave Airlie <airlied at gmail.com> wrote:

> From: Dave Airlie <airlied at redhat.com>
>
> ---
>  src/amd/common/ac_llvm_util.c          | 30 ++++++++++++++++++++++++++
>  src/amd/common/ac_llvm_util.h          |  2 ++
>  src/gallium/drivers/radeonsi/si_pipe.c | 27 ++---------------------
>  3 files changed, 34 insertions(+), 25 deletions(-)
>
> diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
> index 25ff4a8c22a..adcdc730856 100644
> --- a/src/amd/common/ac_llvm_util.c
> +++ b/src/amd/common/ac_llvm_util.c
> @@ -28,6 +28,11 @@
>  #include "util/bitscan.h"
>  #include <llvm-c/Core.h>
>  #include <llvm-c/Support.h>
> +#include <llvm-c/Transforms/IPO.h>
> +#include <llvm-c/Transforms/Scalar.h>
> +#if HAVE_LLVM >= 0x0700
> +#include <llvm-c/Transforms/Utils.h>
> +#endif
>  #include "c11/threads.h"
>  #include "util/u_math.h"
>
> @@ -160,6 +165,31 @@ LLVMTargetMachineRef ac_create_target_machine(enum
> radeon_family family,
>         return tm;
>  }
>
> +LLVMPassManagerRef ac_init_passmgr(LLVMTargetLibraryInfoRef
> target_library_info,
> +                                  bool check_ir)
> +{
> +       LLVMPassManagerRef passmgr = LLVMCreatePassManager();
> +       if (!passmgr)
> +               return NULL;
> +
> +       LLVMAddTargetLibraryInfo(target_library_info,
> +                                passmgr);
> +
> +       if (check_ir)
> +               LLVMAddVerifierPass(passmgr);
> +       LLVMAddAlwaysInlinerPass(passmgr);
> +       /* This pass should eliminate all the load and store instructions.
> */
> +       LLVMAddPromoteMemoryToRegisterPass(passmgr);
> +       LLVMAddScalarReplAggregatesPass(passmgr);
> +       LLVMAddLICMPass(passmgr);
> +       LLVMAddAggressiveDCEPass(passmgr);
> +       LLVMAddCFGSimplificationPass(passmgr);
> +       /* This is recommended by the instruction combining pass. */
> +       LLVMAddEarlyCSEMemSSAPass(passmgr);
> +       LLVMAddInstructionCombiningPass(passmgr);
> +       return passmgr;
> +}
> +
>  static const char *attr_to_str(enum ac_func_attr attr)
>  {
>     switch (attr) {
> diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
> index 4311c5ea8a4..1c0e975aec3 100644
> --- a/src/amd/common/ac_llvm_util.h
> +++ b/src/amd/common/ac_llvm_util.h
> @@ -111,6 +111,8 @@ ac_get_store_intr_attribs(bool writeonly_memory)
>  unsigned
>  ac_count_scratch_private_memory(LLVMValueRef function);
>
> +LLVMPassManagerRef ac_init_passmgr(LLVMTargetLibraryInfoRef
> target_library_info,
> +                                  bool check_ir);
>  void ac_init_llvm_once(void);
>
>  #ifdef __cplusplus
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c
> b/src/gallium/drivers/radeonsi/si_pipe.c
> index 0d6d93a7358..c815c7fc013 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -41,12 +41,6 @@
>  #include "vl/vl_decoder.h"
>  #include "driver_ddebug/dd_util.h"
>
> -#include <llvm-c/Transforms/IPO.h>
> -#include <llvm-c/Transforms/Scalar.h>
> -#if HAVE_LLVM >= 0x0700
> -#include <llvm-c/Transforms/Utils.h>
> -#endif
> -
>  static const struct debug_named_value debug_options[] = {
>         /* Shader logging options: */
>         { "vs", DBG(VS), "Print vertex shaders" },
> @@ -131,27 +125,10 @@ static void si_init_compiler(struct si_screen
> *sscreen,
>         if (!compiler->target_library_info)
>                 return;
>
> -       compiler->passmgr = LLVMCreatePassManager();
> +       compiler->passmgr = ac_init_passmgr(compiler->target_library_info,
> +                                           (sscreen->debug_flags &
> DBG(CHECK_IR)));
>         if (!compiler->passmgr)
>                 return;
> -
> -       LLVMAddTargetLibraryInfo(compiler->target_library_info,
> -                                compiler->passmgr);
> -
> -       /* Add LLVM passes into the pass manager. */
> -       if (sscreen->debug_flags & DBG(CHECK_IR))
> -               LLVMAddVerifierPass(compiler->passmgr);
> -
> -       LLVMAddAlwaysInlinerPass(compiler->passmgr);
> -       /* This pass should eliminate all the load and store instructions.
> */
> -       LLVMAddPromoteMemoryToRegisterPass(compiler->passmgr);
> -       LLVMAddScalarReplAggregatesPass(compiler->passmgr);
> -       LLVMAddLICMPass(compiler->passmgr);
> -       LLVMAddAggressiveDCEPass(compiler->passmgr);
> -       LLVMAddCFGSimplificationPass(compiler->passmgr);
> -       /* This is recommended by the instruction combining pass. */
> -       LLVMAddEarlyCSEMemSSAPass(compiler->passmgr);
> -       LLVMAddInstructionCombiningPass(compiler->passmgr);
>  }
>
>  static void si_destroy_compiler(struct si_compiler *compiler)
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180703/3b756b5e/attachment.html>


More information about the mesa-dev mailing list