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