gallivm: Choose an appropriate code generation optimization level.
'Default' unless GALLIVM_DEBUG=nopt option is set.
This commit is contained in:
parent
e5d0c730d1
commit
ba404c8f2a
|
@ -52,6 +52,29 @@ LLVMModuleProviderRef lp_build_provider = NULL;
|
||||||
LLVMTargetDataRef lp_build_target = NULL;
|
LLVMTargetDataRef lp_build_target = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Optimization values are:
|
||||||
|
* - 0: None (-O0)
|
||||||
|
* - 1: Less (-O1)
|
||||||
|
* - 2: Default (-O2, -Os)
|
||||||
|
* - 3: Aggressive (-O3)
|
||||||
|
*
|
||||||
|
* See also CodeGenOpt::Level in llvm/Target/TargetMachine.h
|
||||||
|
*/
|
||||||
|
enum LLVM_CodeGenOpt_Level {
|
||||||
|
#if HAVE_LLVM >= 0x207
|
||||||
|
None, // -O0
|
||||||
|
Less, // -O1
|
||||||
|
Default, // -O2, -Os
|
||||||
|
Aggressive // -O3
|
||||||
|
#else
|
||||||
|
Default,
|
||||||
|
None,
|
||||||
|
Aggressive
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
lp_build_init(void)
|
lp_build_init(void)
|
||||||
{
|
{
|
||||||
|
@ -70,9 +93,18 @@ lp_build_init(void)
|
||||||
lp_build_provider = LLVMCreateModuleProviderForExistingModule(lp_build_module);
|
lp_build_provider = LLVMCreateModuleProviderForExistingModule(lp_build_module);
|
||||||
|
|
||||||
if (!lp_build_engine) {
|
if (!lp_build_engine) {
|
||||||
|
enum LLVM_CodeGenOpt_Level optlevel;
|
||||||
char *error = NULL;
|
char *error = NULL;
|
||||||
|
|
||||||
if (LLVMCreateJITCompiler(&lp_build_engine, lp_build_provider, 1, &error)) {
|
if (gallivm_debug & GALLIVM_DEBUG_NO_OPT) {
|
||||||
|
optlevel = None;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
optlevel = Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LLVMCreateJITCompiler(&lp_build_engine, lp_build_provider,
|
||||||
|
(unsigned)optlevel, &error)) {
|
||||||
_debug_printf("%s\n", error);
|
_debug_printf("%s\n", error);
|
||||||
LLVMDisposeMessage(error);
|
LLVMDisposeMessage(error);
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
Loading…
Reference in New Issue