summaryrefslogtreecommitdiff
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.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/source/slang/slang-ir-inline.cpp b/source/slang/slang-ir-inline.cpp
index a5538425f..1e8c1462f 100644
--- a/source/slang/slang-ir-inline.cpp
+++ b/source/slang/slang-ir-inline.cpp
@@ -709,15 +709,15 @@ void performMandatoryEarlyInlining(IRModule* module)
namespace { // anonymous
// Inlines calls that involve String types
-struct StringInliningPass : InliningPassBase
+struct TypeInliningPass : InliningPassBase
{
typedef InliningPassBase Super;
- StringInliningPass(IRModule* module)
+ TypeInliningPass(IRModule* module)
: Super(module)
{}
- bool doesTypeRequireInline(IRType* type)
+ bool doesTypeRequireInline(IRType* type, IRFunc* callee)
{
// TODO(JS):
// I guess there is a question here about what type around string requires
@@ -727,6 +727,12 @@ struct StringInliningPass : InliningPassBase
const auto op = type->getOp();
switch (op)
{
+ case kIROp_RefType:
+ {
+ if(callee->findDecoration<IRNoRefInlineDecoration>())
+ return false;
+ return true;
+ }
case kIROp_StringType:
case kIROp_NativeStringType:
{
@@ -742,7 +748,7 @@ struct StringInliningPass : InliningPassBase
{
auto callee = info.callee;
- if (doesTypeRequireInline(callee->getResultType()))
+ if (doesTypeRequireInline(callee->getResultType(), callee))
{
return true;
}
@@ -750,7 +756,7 @@ struct StringInliningPass : InliningPassBase
const auto count = Count(callee->getParamCount());
for (Index i = 0; i < count; ++i)
{
- if (doesTypeRequireInline(callee->getParamType(UInt(i))))
+ if (doesTypeRequireInline(callee->getParamType(UInt(i)), callee))
{
return true;
}
@@ -762,7 +768,7 @@ struct StringInliningPass : InliningPassBase
} // anonymous
-Result performStringInlining(IRModule* module, DiagnosticSink* sink)
+Result performTypeInlining(IRModule* module, DiagnosticSink* sink)
{
SLANG_UNUSED(sink);
@@ -780,7 +786,7 @@ Result performStringInlining(IRModule* module, DiagnosticSink* sink)
//
while(true)
{
- StringInliningPass pass(module);
+ TypeInliningPass pass(module);
if (pass.considerAllCallSites())
{
// If there was a change try inlining again