diff options
Diffstat (limited to 'source/slang/slang-ir-inline.cpp')
| -rw-r--r-- | source/slang/slang-ir-inline.cpp | 22 |
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); |
