diff options
| author | Yong He <yonghe@outlook.com> | 2023-10-04 11:20:35 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-04 11:20:35 -0700 |
| commit | ac886fd3e329a9599ed1ac7a6d8b26ca5821046c (patch) | |
| tree | 87bcafb3985775f9d90303d6a4239eb743164407 /source/slang/slang-ir-inline.cpp | |
| parent | d87493a46c00be37b820a473c0827bbb865eb222 (diff) | |
SPIRV compiler performance fixes. (#3258)
* SPIRV compiler performance fixes.
* Cleanup.
* update project files
* Cleanup debug code.
* Make redundancy removal non-recursive.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-inline.cpp')
| -rw-r--r-- | source/slang/slang-ir-inline.cpp | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/source/slang/slang-ir-inline.cpp b/source/slang/slang-ir-inline.cpp index 8412a1912..3b01d7dde 100644 --- a/source/slang/slang-ir-inline.cpp +++ b/source/slang/slang-ir-inline.cpp @@ -252,9 +252,6 @@ struct InliningPassBase { case kIROp_IntrinsicOpDecoration: return true; - case kIROp_RequireSPIRVCapabilityDecoration: - // Don't inline a function with spirv capability decoration to avoid losing it. - return false; } } @@ -947,7 +944,7 @@ void performGLSLResourceReturnFunctionInlining(IRModule* module) while (changed) { changed = pass.considerAllCallSites(); - simplifyIR(module); + simplifyIR(module, IRSimplificationOptions::getFast()); } } @@ -964,8 +961,6 @@ struct IntrinsicFunctionInliningPass : InliningPassBase auto func = as<IRFunc>(getResolvedInstForDecorations(info.callee)); if (!func) return false; - if (func->findDecorationImpl(kIROp_RequireSPIRVCapabilityDecoration)) - return false; auto returnInst = as<IRReturn>(func->getFirstBlock()->getTerminator()); if (!returnInst) return false; @@ -1025,4 +1020,32 @@ bool inlineCall(IRCall* call) } +struct SpirvInliningPass : InliningPassBase +{ + typedef InliningPassBase Super; + + SpirvInliningPass(IRModule* module) + : Super(module) + {} + + bool shouldInline(CallSiteInfo const& info) + { + if (!info.callee->findDecoration<IREntryPointDecoration>()) + return true; + return false; + } +}; + +void performSpirvInlining(IRModule* module) +{ + SLANG_PROFILE; + while (true) + { + SpirvInliningPass pass(module); + if (pass.considerAllCallSites()) + continue; + break; + } +} + } // namespace Slang |
