summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-inline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-inline.cpp')
-rw-r--r--source/slang/slang-ir-inline.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/source/slang/slang-ir-inline.cpp b/source/slang/slang-ir-inline.cpp
index 70d98d10c..8f5412fa6 100644
--- a/source/slang/slang-ir-inline.cpp
+++ b/source/slang/slang-ir-inline.cpp
@@ -516,6 +516,28 @@ void performMandatoryEarlyInlining(IRModule* module)
pass.considerAllCallSites();
}
+struct ForceInliningPass : InliningPassBase
+{
+ typedef InliningPassBase Super;
+
+ ForceInliningPass(IRModule* module)
+ : Super(module)
+ {}
+
+ bool shouldInline(CallSiteInfo const& info)
+ {
+ if (info.callee->findDecoration<IRForceInlineDecoration>() ||
+ info.callee->findDecoration<IRUnsafeForceInlineEarlyDecoration>())
+ return true;
+ return false;
+ }
+};
+
+void performForceInlining(IRModule* module)
+{
+ ForceInliningPass pass(module);
+ pass.considerAllCallSites();
+}
// Defined in slang-ir-specialize-resource.cpp
bool isResourceType(IRType* type);