mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
ac: run LLVM optimization passes only on the final function after inlining
This commit is contained in:
parent
17b5a59b4e
commit
9b82d128c9
3 changed files with 14 additions and 0 deletions
|
|
@ -36,6 +36,7 @@
|
|||
#include <llvm/Target/TargetMachine.h>
|
||||
#include <llvm/IR/IRBuilder.h>
|
||||
#include <llvm/Analysis/TargetLibraryInfo.h>
|
||||
#include <llvm/Transforms/IPO.h>
|
||||
|
||||
#include <llvm/IR/LegacyPassManager.h>
|
||||
#if HAVE_LLVM < 0x0700
|
||||
|
|
@ -165,3 +166,8 @@ bool ac_compile_module_to_binary(struct ac_compiler_passes *p, LLVMModuleRef mod
|
|||
fprintf(stderr, "amd: cannot read an ELF shader binary\n");
|
||||
return success;
|
||||
}
|
||||
|
||||
void ac_llvm_add_barrier_noop_pass(LLVMPassManagerRef passmgr)
|
||||
{
|
||||
llvm::unwrap(passmgr)->add(llvm::createBarrierNoopPass());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -181,6 +181,13 @@ static LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_libr
|
|||
if (check_ir)
|
||||
LLVMAddVerifierPass(passmgr);
|
||||
LLVMAddAlwaysInlinerPass(passmgr);
|
||||
/* Normally, the pass manager runs all passes on one function before
|
||||
* moving onto another. Adding a barrier no-op pass forces the pass
|
||||
* manager to run the inliner on all functions first, which makes sure
|
||||
* that the following passes are only run on the remaining non-inline
|
||||
* function, so it removes useless work done on dead inline functions.
|
||||
*/
|
||||
ac_llvm_add_barrier_noop_pass(passmgr);
|
||||
/* This pass should eliminate all the load and store instructions. */
|
||||
LLVMAddPromoteMemoryToRegisterPass(passmgr);
|
||||
LLVMAddScalarReplAggregatesPass(passmgr);
|
||||
|
|
|
|||
|
|
@ -133,6 +133,7 @@ struct ac_compiler_passes *ac_create_llvm_passes(LLVMTargetMachineRef tm);
|
|||
void ac_destroy_llvm_passes(struct ac_compiler_passes *p);
|
||||
bool ac_compile_module_to_binary(struct ac_compiler_passes *p, LLVMModuleRef module,
|
||||
struct ac_shader_binary *binary);
|
||||
void ac_llvm_add_barrier_noop_pass(LLVMPassManagerRef passmgr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue