perf(cpu): tune Release JIT compilation (#301)
This commit is contained in:
parent
8855290cfa
commit
c5325c2ff3
|
|
@ -62,7 +62,7 @@
|
|||
<PreprocessKeepComments>false</PreprocessKeepComments>
|
||||
<StringPooling>true</StringPooling>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<StructMemberAlignment>Default</StructMemberAlignment>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
|
|
|
|||
|
|
@ -3,14 +3,15 @@
|
|||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>false</OmitFramePointers>
|
||||
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<AdditionalOptions>/Gw %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
|
|
|||
|
|
@ -238,9 +238,14 @@ std::shared_ptr<Dynarmic::A32::Jit> ArmDynarmic32::MakeJit(IKernelProcess & proc
|
|||
config.check_halt_on_memory_access = true;
|
||||
}
|
||||
|
||||
#if !defined(NDEBUG)
|
||||
config.optimizations &= ~Dynarmic::OptimizationFlag::DisableVerification;
|
||||
#endif
|
||||
|
||||
// Safe optimizations
|
||||
if (cpuSettings.cpu_debug_mode)
|
||||
{
|
||||
config.optimizations &= ~Dynarmic::OptimizationFlag::DisableVerification;
|
||||
if (!cpuSettings.cpuopt_page_tables)
|
||||
{
|
||||
config.page_table = nullptr;
|
||||
|
|
|
|||
|
|
@ -369,9 +369,14 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(IKernelProcess & proc
|
|||
config.check_halt_on_memory_access = true;
|
||||
}
|
||||
|
||||
#if !defined(NDEBUG)
|
||||
config.optimizations &= ~Dynarmic::OptimizationFlag::DisableVerification;
|
||||
#endif
|
||||
|
||||
// Safe optimizations
|
||||
if (cpuSettings.cpu_debug_mode)
|
||||
{
|
||||
config.optimizations &= ~Dynarmic::OptimizationFlag::DisableVerification;
|
||||
if (!cpuSettings.cpuopt_page_tables)
|
||||
{
|
||||
config.page_table = nullptr;
|
||||
|
|
|
|||
|
|
@ -176,7 +176,9 @@ IR::Block A32AddressSpace::GenerateIR(IR::LocationDescriptor descriptor) const {
|
|||
Optimization::DeadCodeElimination(ir_block);
|
||||
}
|
||||
Optimization::IdentityRemovalPass(ir_block);
|
||||
Optimization::VerificationPass(ir_block);
|
||||
if (!conf.HasOptimization(OptimizationFlag::DisableVerification)) {
|
||||
Optimization::VerificationPass(ir_block);
|
||||
}
|
||||
|
||||
return ir_block;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -345,7 +345,9 @@ IR::Block A64AddressSpace::GenerateIR(IR::LocationDescriptor descriptor) const {
|
|||
if (conf.HasOptimization(OptimizationFlag::MiscIROpt)) {
|
||||
Optimization::A64MergeInterpretBlocksPass(ir_block, conf.callbacks);
|
||||
}
|
||||
Optimization::VerificationPass(ir_block);
|
||||
if (!conf.HasOptimization(OptimizationFlag::DisableVerification)) {
|
||||
Optimization::VerificationPass(ir_block);
|
||||
}
|
||||
|
||||
return ir_block;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -226,7 +226,9 @@ private:
|
|||
Optimization::DeadCodeElimination(ir_block);
|
||||
}
|
||||
Optimization::IdentityRemovalPass(ir_block);
|
||||
Optimization::VerificationPass(ir_block);
|
||||
if (!conf.HasOptimization(OptimizationFlag::DisableVerification)) {
|
||||
Optimization::VerificationPass(ir_block);
|
||||
}
|
||||
return emitter.Emit(ir_block);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -295,7 +295,9 @@ private:
|
|||
if (conf.HasOptimization(OptimizationFlag::MiscIROpt)) {
|
||||
Optimization::A64MergeInterpretBlocksPass(ir_block, conf.callbacks);
|
||||
}
|
||||
Optimization::VerificationPass(ir_block);
|
||||
if (!conf.HasOptimization(OptimizationFlag::DisableVerification)) {
|
||||
Optimization::VerificationPass(ir_block);
|
||||
}
|
||||
return emitter.Emit(ir_block).entrypoint;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ enum class OptimizationFlag : std::uint32_t {
|
|||
ConstProp = 0x00000010,
|
||||
/// This is enables miscellaneous safe IR optimizations.
|
||||
MiscIROpt = 0x00000020,
|
||||
/// Disable IR verification passes after translation and optimization.
|
||||
DisableVerification = 0x00000080,
|
||||
|
||||
/// This is an UNSAFE optimization that reduces accuracy of fused multiply-add operations.
|
||||
/// This unfuses fused instructions to improve performance on host CPUs without FMA support.
|
||||
|
|
|
|||
Loading…
Reference in New Issue