summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-specialize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-specialize.cpp')
-rw-r--r--source/slang/slang-ir-specialize.cpp43
1 files changed, 14 insertions, 29 deletions
diff --git a/source/slang/slang-ir-specialize.cpp b/source/slang/slang-ir-specialize.cpp
index b1da92ff1..9ceb4dbe7 100644
--- a/source/slang/slang-ir-specialize.cpp
+++ b/source/slang/slang-ir-specialize.cpp
@@ -635,8 +635,7 @@ struct SpecializationContext
// generate along the way.
//
SharedIRBuilder* sharedBuilder = &sharedBuilderStorage;
- sharedBuilder->module = module;
- sharedBuilder->session = module->session;
+ sharedBuilder->init(module);
// The unspecialized IR we receive as input will have
// `IRBindGlobalGenericParam` instructions that associate
@@ -785,8 +784,7 @@ struct SpecializationContext
{
auto oldSpecialize = cast<IRSpecialize>(oldSpecializedCallee);
SLANG_ASSERT(oldSpecialize->getArgCount() == 1);
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(oldSpecializedCallee);
auto calleeType = builder.getFuncType(1, &newContainerType, newElementType);
auto newSpecialize = builder.emitSpecializeInst(
@@ -816,8 +814,7 @@ struct SpecializationContext
auto resultType = inst->getFullType();
auto elementType = sbType->getElementType();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(inst);
List<IRInst*> args;
@@ -1057,9 +1054,8 @@ struct SpecializationContext
// Now that we've built up our argument list, it is simple enough
// to construct a new `call` instruction.
//
- IRBuilder builderStorage;
+ IRBuilder builderStorage(sharedBuilderStorage);
auto builder = &builderStorage;
- builder->sharedBuilder = &sharedBuilderStorage;
builder->setInsertBefore(inst);
auto newCall = builder->emitCallInst(
@@ -1214,9 +1210,8 @@ struct SpecializationContext
// We also need some IR building state, for any
// new instructions we will emit.
//
- IRBuilder builderStorage;
+ IRBuilder builderStorage(sharedBuilderStorage);
auto builder = &builderStorage;
- builder->sharedBuilder = &sharedBuilderStorage;
// We will start out by determining what the parameters
// of the specialized function should be, based on
@@ -1355,7 +1350,7 @@ struct SpecializationContext
//
cloneInstDecorationsAndChildren(
&cloneEnv,
- builder->sharedBuilder,
+ builder->getSharedBuilder(),
oldFunc,
newFunc);
@@ -1528,8 +1523,7 @@ struct SpecializationContext
//
auto resultType = inst->getFullType();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(inst);
// We'd *like* to replace this instruction with
@@ -1626,8 +1620,7 @@ struct SpecializationContext
//
auto resultType = inst->getFullType();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(inst);
// We'd *like* to replace this instruction with
@@ -1712,8 +1705,7 @@ struct SpecializationContext
//
auto resultType = inst->getFullType();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(inst);
// We'd *like* to replace this instruction with
@@ -1798,8 +1790,7 @@ struct SpecializationContext
auto val = wrapInst->getWrappedValue();
auto resultType = inst->getFullType();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(inst);
auto elementType = cast<IRArrayTypeBase>(val->getDataType())->getElementType();
@@ -1840,8 +1831,7 @@ struct SpecializationContext
auto resultType = inst->getFullType();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(inst);
List<IRInst*> slotOperands;
@@ -1908,8 +1898,7 @@ struct SpecializationContext
auto baseType = type->getBaseType();
UInt slotOperandCount = type->getExistentialArgCount();
- IRBuilder builder;
- builder.sharedBuilder = &sharedBuilderStorage;
+ IRBuilder builder(sharedBuilderStorage);
builder.setInsertBefore(type);
if( auto baseInterfaceType = as<IRInterfaceType>(baseType) )
@@ -2153,13 +2142,9 @@ IRInst* specializeGenericImpl(
// into the global scope, at the same location
// as the original generic.
//
- SharedIRBuilder sharedBuilderStorage;
- sharedBuilderStorage.module = module;
- sharedBuilderStorage.session = module->getSession();
-
- IRBuilder builderStorage;
+ SharedIRBuilder sharedBuilderStorage(module);
+ IRBuilder builderStorage(sharedBuilderStorage);
IRBuilder* builder = &builderStorage;
- builder->sharedBuilder = &sharedBuilderStorage;
builder->setInsertBefore(genericVal);
// Now we will run through the body of the generic and