mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
ac/radeonsi: refactor out pass manager init to common code.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
f2b3e96e75
commit
584ad1eda9
3 changed files with 34 additions and 25 deletions
|
|
@ -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_create_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) {
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ ac_get_store_intr_attribs(bool writeonly_memory)
|
|||
unsigned
|
||||
ac_count_scratch_private_memory(LLVMValueRef function);
|
||||
|
||||
LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_library_info,
|
||||
bool check_ir);
|
||||
void ac_init_llvm_once(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -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_create_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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue