Re: [Mesa-dev] [PATCH 35/38] ac,radv: run LLVM's SLP vectorizer

2018-12-17 Thread Marek Olšák
Can you remove AC_TM_SLP_VECTORIZE and run the pass unconditionally on >=
gfx9?

Thanks,
Marek

On Fri, Dec 7, 2018 at 12:23 PM Rhys Perry  wrote:

> Signed-off-by: Rhys Perry 
> ---
>  src/amd/common/ac_llvm_util.c | 9 ++---
>  src/amd/common/ac_llvm_util.h | 1 +
>  src/amd/vulkan/radv_shader.c  | 3 +++
>  3 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
> index dc9b684e9d..3219126188 100644
> --- a/src/amd/common/ac_llvm_util.c
> +++ b/src/amd/common/ac_llvm_util.c
> @@ -33,6 +33,7 @@
>  #if HAVE_LLVM >= 0x0700
>  #include 
>  #endif
> +#include 
>  #include "c11/threads.h"
>  #include "gallivm/lp_bld_misc.h"
>  #include "util/u_math.h"
> @@ -177,7 +178,7 @@ static LLVMTargetMachineRef
> ac_create_target_machine(enum radeon_family family,
>  }
>
>  static LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef
> target_library_info,
> -   bool check_ir)
> +   enum ac_target_machine_options
> tm_options)
>  {
> LLVMPassManagerRef passmgr = LLVMCreatePassManager();
> if (!passmgr)
> @@ -187,7 +188,7 @@ static LLVMPassManagerRef
> ac_create_passmgr(LLVMTargetLibraryInfoRef target_libr
> LLVMAddTargetLibraryInfo(target_library_info,
>  passmgr);
>
> -   if (check_ir)
> +   if (tm_options & AC_TM_CHECK_IR)
> LLVMAddVerifierPass(passmgr);
> LLVMAddAlwaysInlinerPass(passmgr);
> /* Normally, the pass manager runs all passes on one function
> before
> @@ -203,6 +204,8 @@ static LLVMPassManagerRef
> ac_create_passmgr(LLVMTargetLibraryInfoRef target_libr
> LLVMAddLICMPass(passmgr);
> LLVMAddAggressiveDCEPass(passmgr);
> LLVMAddCFGSimplificationPass(passmgr);
> +   if (tm_options & AC_TM_SLP_VECTORIZE)
> +   LLVMAddSLPVectorizePass(passmgr);
> /* This is recommended by the instruction combining pass. */
> LLVMAddEarlyCSEMemSSAPass(passmgr);
> LLVMAddInstructionCombiningPass(passmgr);
> @@ -332,7 +335,7 @@ ac_init_llvm_compiler(struct ac_llvm_compiler
> *compiler,
> }
>
> compiler->passmgr =
> ac_create_passmgr(compiler->target_library_info,
> - tm_options & AC_TM_CHECK_IR);
> + tm_options);
> if (!compiler->passmgr)
> goto fail;
>
> diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
> index eaf5f21876..35b12c6c6c 100644
> --- a/src/amd/common/ac_llvm_util.h
> +++ b/src/amd/common/ac_llvm_util.h
> @@ -65,6 +65,7 @@ enum ac_target_machine_options {
> AC_TM_CHECK_IR = (1 << 5),
> AC_TM_ENABLE_GLOBAL_ISEL = (1 << 6),
> AC_TM_CREATE_LOW_OPT = (1 << 7),
> +   AC_TM_SLP_VECTORIZE = (1 << 8),
>  };
>
>  enum ac_float_mode {
> diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
> index 9ba20ac72e..a2ddf17680 100644
> --- a/src/amd/vulkan/radv_shader.c
> +++ b/src/amd/vulkan/radv_shader.c
> @@ -598,6 +598,9 @@ shader_variant_create(struct radv_device *device,
> tm_options |= AC_TM_SISCHED;
> if (options->check_ir)
> tm_options |= AC_TM_CHECK_IR;
> +   /* vectorization is disabled on pre-GFX9 because it's not very
> useful there */
> +   if (device->physical_device->rad_info.chip_class >= GFX9)
> +   tm_options |= AC_TM_SLP_VECTORIZE;
>
> thread_compiler = !(device->instance->debug_flags &
> RADV_DEBUG_NOTHREADLLVM);
> radv_init_llvm_once();
> --
> 2.19.2
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 35/38] ac,radv: run LLVM's SLP vectorizer

2018-12-07 Thread Rhys Perry
Signed-off-by: Rhys Perry 
---
 src/amd/common/ac_llvm_util.c | 9 ++---
 src/amd/common/ac_llvm_util.h | 1 +
 src/amd/vulkan/radv_shader.c  | 3 +++
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
index dc9b684e9d..3219126188 100644
--- a/src/amd/common/ac_llvm_util.c
+++ b/src/amd/common/ac_llvm_util.c
@@ -33,6 +33,7 @@
 #if HAVE_LLVM >= 0x0700
 #include 
 #endif
+#include 
 #include "c11/threads.h"
 #include "gallivm/lp_bld_misc.h"
 #include "util/u_math.h"
@@ -177,7 +178,7 @@ static LLVMTargetMachineRef ac_create_target_machine(enum 
radeon_family family,
 }
 
 static LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef 
target_library_info,
-   bool check_ir)
+   enum ac_target_machine_options 
tm_options)
 {
LLVMPassManagerRef passmgr = LLVMCreatePassManager();
if (!passmgr)
@@ -187,7 +188,7 @@ static LLVMPassManagerRef 
ac_create_passmgr(LLVMTargetLibraryInfoRef target_libr
LLVMAddTargetLibraryInfo(target_library_info,
 passmgr);
 
-   if (check_ir)
+   if (tm_options & AC_TM_CHECK_IR)
LLVMAddVerifierPass(passmgr);
LLVMAddAlwaysInlinerPass(passmgr);
/* Normally, the pass manager runs all passes on one function before
@@ -203,6 +204,8 @@ static LLVMPassManagerRef 
ac_create_passmgr(LLVMTargetLibraryInfoRef target_libr
LLVMAddLICMPass(passmgr);
LLVMAddAggressiveDCEPass(passmgr);
LLVMAddCFGSimplificationPass(passmgr);
+   if (tm_options & AC_TM_SLP_VECTORIZE)
+   LLVMAddSLPVectorizePass(passmgr);
/* This is recommended by the instruction combining pass. */
LLVMAddEarlyCSEMemSSAPass(passmgr);
LLVMAddInstructionCombiningPass(passmgr);
@@ -332,7 +335,7 @@ ac_init_llvm_compiler(struct ac_llvm_compiler *compiler,
}
 
compiler->passmgr = ac_create_passmgr(compiler->target_library_info,
- tm_options & AC_TM_CHECK_IR);
+ tm_options);
if (!compiler->passmgr)
goto fail;
 
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index eaf5f21876..35b12c6c6c 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -65,6 +65,7 @@ enum ac_target_machine_options {
AC_TM_CHECK_IR = (1 << 5),
AC_TM_ENABLE_GLOBAL_ISEL = (1 << 6),
AC_TM_CREATE_LOW_OPT = (1 << 7),
+   AC_TM_SLP_VECTORIZE = (1 << 8),
 };
 
 enum ac_float_mode {
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 9ba20ac72e..a2ddf17680 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -598,6 +598,9 @@ shader_variant_create(struct radv_device *device,
tm_options |= AC_TM_SISCHED;
if (options->check_ir)
tm_options |= AC_TM_CHECK_IR;
+   /* vectorization is disabled on pre-GFX9 because it's not very useful 
there */
+   if (device->physical_device->rad_info.chip_class >= GFX9)
+   tm_options |= AC_TM_SLP_VECTORIZE;
 
thread_compiler = !(device->instance->debug_flags & 
RADV_DEBUG_NOTHREADLLVM);
radv_init_llvm_once();
-- 
2.19.2

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev