summaryrefslogtreecommitdiffstats
path: root/source/slang/emit.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-09-14 14:16:28 -0400
committerGitHub <noreply@github.com>2018-09-14 14:16:28 -0400
commit3c505c22673701339d35eb2151f01c16eb3c78c3 (patch)
treeff21543fcc846c693cbb6aba43a4e8ae9918f600 /source/slang/emit.cpp
parente1c934972509f4bbd2c05affe565f91e7a1e6c16 (diff)
Improvements around IR representation and memory usage (#635)
* * Remove dispose from IRInst * Use MemoryArena instead of MemoryPool * Make all IRInst not require Dtor - by having ref counted array store ptrs that need freeing * Increase block size - typically compilation is 2Mb of IR space(!) * Fix issues around StringRepresentation::equal because null has special meaning. * Don't bother to construct as String to compare StringRepresentation, just used UnownedStringSlice. * Added fromLiteral support to UnownedStringSlice and use instead of strlen version. * Use more conventional way to test StringRepresentation against a String. * Fix gcc/clang template problem with cast.
Diffstat (limited to 'source/slang/emit.cpp')
-rw-r--r--source/slang/emit.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp
index 1d121d69b..2d774d8d8 100644
--- a/source/slang/emit.cpp
+++ b/source/slang/emit.cpp
@@ -1389,7 +1389,7 @@ struct EmitVisitor
bool isTargetIntrinsicModifierApplicable(
IRTargetIntrinsicDecoration* decoration)
{
- auto targetName = decoration->targetName;
+ auto targetName = String(decoration->targetName);
// If no target name was specified, then the modifier implicitly
// applies to all targets.
@@ -2133,7 +2133,7 @@ struct EmitVisitor
// then use that name instead.
if(auto intrinsicDecoration = findTargetIntrinsicDecoration(context, inst))
{
- return intrinsicDecoration->definition;
+ return String(intrinsicDecoration->definition);
}
// If we have a name hint on the instruction, then we will try to use that
@@ -2945,7 +2945,7 @@ struct EmitVisitor
args++;
argCount--;
- auto name = targetIntrinsic->definition;
+ auto name = String(targetIntrinsic->definition);
if(isOrdinaryName(name))
@@ -3845,11 +3845,11 @@ struct EmitVisitor
if(auto layoutDecoration = inst->findDecoration<IRLayoutDecoration>())
{
auto layout = layoutDecoration->layout;
- if(auto varLayout = layout.As<VarLayout>())
+ if(auto varLayout = layout->dynamicCast<VarLayout>())
{
emitIRSemantics(ctx, varLayout);
}
- else if (auto entryPointLayout = layout.As<EntryPointLayout>())
+ else if (auto entryPointLayout = layout->dynamicCast<EntryPointLayout>())
{
emitIRSemantics(ctx, entryPointLayout->resultLayout);
}
@@ -3864,7 +3864,7 @@ struct EmitVisitor
if (!decoration)
return nullptr;
- return (VarLayout*) decoration->layout.Ptr();
+ return (VarLayout*) decoration->layout;
}
void emitIRLayoutSemantics(
@@ -4757,7 +4757,7 @@ struct EmitVisitor
{
if( auto layoutDecoration = func->findDecoration<IRLayoutDecoration>() )
{
- return layoutDecoration->layout.As<EntryPointLayout>();
+ return layoutDecoration->layout->dynamicCast<EntryPointLayout>();
}
return nullptr;
}
@@ -4766,7 +4766,7 @@ struct EmitVisitor
{
if (auto layoutDecoration = func->findDecoration<IRLayoutDecoration>())
{
- if (auto entryPointLayout = layoutDecoration->layout.As<EntryPointLayout>())
+ if (auto entryPointLayout = layoutDecoration->layout->dynamicCast<EntryPointLayout>())
{
return entryPointLayout;
}