summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-inline.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-10-04 11:20:35 -0700
committerGitHub <noreply@github.com>2023-10-04 11:20:35 -0700
commitac886fd3e329a9599ed1ac7a6d8b26ca5821046c (patch)
tree87bcafb3985775f9d90303d6a4239eb743164407 /source/slang/slang-ir-inline.cpp
parentd87493a46c00be37b820a473c0827bbb865eb222 (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.cpp35
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