diff options
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 74 |
1 files changed, 28 insertions, 46 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index 3d686304a..40c88a0bc 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -1083,7 +1083,7 @@ IRStructKey* getInterfaceRequirementKey( IRBuilder builderStorage = *context->irBuilder; auto builder = &builderStorage; - builder->setInsertInto(builder->sharedBuilder->module->getModuleInst()); + builder->setInsertInto(builder->getModule()); // Construct a key to serve as the representation of // this requirement in the IR, and to allow lookup @@ -1259,9 +1259,8 @@ struct ValLoweringVisitor : ValVisitor<ValLoweringVisitor, LoweredValInfo, Lower auto irFunc = getBuilder()->createFunc(); irSatisfyingVal = irFunc; - IRBuilder subBuilderStorage; + IRBuilder subBuilderStorage(getBuilder()->getSharedBuilder()); auto subBuilder = &subBuilderStorage; - subBuilder->sharedBuilder = getBuilder()->sharedBuilder; subBuilder->setInsertInto(irFunc); // We will start by setting up the function parameters, @@ -5909,7 +5908,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // IR global variable under the parent of its containing // function. // - auto parent = getBuilder()->insertIntoParent; + auto parent = getBuilder()->getInsertLoc().getParent(); if(auto block = as<IRBlock>(parent)) parent = block->getParent(); @@ -6695,8 +6694,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo> // return f : ftype; // } // ``` - IRBuilder typeBuilder; - typeBuilder.sharedBuilder = subBuilder->sharedBuilder; + IRBuilder typeBuilder(subBuilder->getSharedBuilder()); IRCloneEnv cloneEnv = {}; if (returnType) { @@ -7546,9 +7544,8 @@ LoweredValInfo ensureDecl( env = env->outer; } - IRBuilder subIRBuilder; - subIRBuilder.sharedBuilder = context->irBuilder->sharedBuilder; - subIRBuilder.setInsertInto(subIRBuilder.sharedBuilder->module->getModuleInst()); + IRBuilder subIRBuilder(context->irBuilder->getSharedBuilder()); + subIRBuilder.setInsertInto(subIRBuilder.getModule()); IRGenEnv subEnv; subEnv.outer = context->env; @@ -7961,14 +7958,15 @@ static void ensureAllDeclsRec( } } -IRModule* generateIRForTranslationUnit( +RefPtr<IRModule> generateIRForTranslationUnit( ASTBuilder* astBuilder, TranslationUnitRequest* translationUnit) { + auto session = translationUnit->getSession(); auto compileRequest = translationUnit->compileRequest; SharedIRGenContext sharedContextStorage( - translationUnit->getSession(), + session, translationUnit->compileRequest->getSink(), translationUnit->compileRequest->getLinkage()->m_obfuscateCode, translationUnit->getModuleDecl()); @@ -7977,17 +7975,13 @@ IRModule* generateIRForTranslationUnit( IRGenContext contextStorage(sharedContext, astBuilder); IRGenContext* context = &contextStorage; - SharedIRBuilder sharedBuilderStorage; + RefPtr<IRModule> module = IRModule::create(session); + + SharedIRBuilder sharedBuilderStorage(module); SharedIRBuilder* sharedBuilder = &sharedBuilderStorage; - sharedBuilder->module = nullptr; - sharedBuilder->session = compileRequest->getSession(); - IRBuilder builderStorage; + IRBuilder builderStorage(sharedBuilder); IRBuilder* builder = &builderStorage; - builder->sharedBuilder = sharedBuilder; - - IRModule* module = builder->createModule(); - sharedBuilder->module = module; context->irBuilder = builder; @@ -8181,19 +8175,15 @@ struct SpecializedComponentTypeIRGenContext : ComponentTypeVisitor IRGenContext contextStorage(sharedContext, linkage->getASTBuilder()); context = &contextStorage; - SharedIRBuilder sharedBuilderStorage; + RefPtr<IRModule> module = IRModule::create(session); + + SharedIRBuilder sharedBuilderStorage(module); SharedIRBuilder* sharedBuilder = &sharedBuilderStorage; - sharedBuilder->module = nullptr; - sharedBuilder->session = session; - IRBuilder builderStorage; + IRBuilder builderStorage(sharedBuilder); builder = &builderStorage; - builder->sharedBuilder = sharedBuilder; - - RefPtr<IRModule> module = builder->createModule(); - sharedBuilder->module = module; - builder->setInsertInto(module->getModuleInst()); + builder->setInsertInto(module); context->irBuilder = builder; @@ -8315,19 +8305,15 @@ struct TypeConformanceIRGenContext IRGenContext contextStorage(sharedContext, linkage->getASTBuilder()); context = &contextStorage; - SharedIRBuilder sharedBuilderStorage; + RefPtr<IRModule> module = IRModule::create(session); + + SharedIRBuilder sharedBuilderStorage(module); SharedIRBuilder* sharedBuilder = &sharedBuilderStorage; - sharedBuilder->module = nullptr; - sharedBuilder->session = session; - IRBuilder builderStorage; + IRBuilder builderStorage(sharedBuilder); builder = &builderStorage; - builder->sharedBuilder = sharedBuilder; - - RefPtr<IRModule> module = builder->createModule(); - sharedBuilder->module = module; - builder->setInsertInto(module->getModuleInst()); + builder->setInsertInto(module); context->irBuilder = builder; @@ -8667,19 +8653,15 @@ RefPtr<IRModule> TargetProgram::createIRModuleForLayout(DiagnosticSink* sink) IRLayoutGenContext contextStorage(sharedContext, astBuilder); auto context = &contextStorage; - SharedIRBuilder sharedBuilderStorage; + RefPtr<IRModule> irModule = IRModule::create(session); + + SharedIRBuilder sharedBuilderStorage(irModule); auto sharedBuilder = &sharedBuilderStorage; - sharedBuilder->module = nullptr; - sharedBuilder->session = session; - IRBuilder builderStorage; + IRBuilder builderStorage(sharedBuilder); auto builder = &builderStorage; - builder->sharedBuilder = sharedBuilder; - - RefPtr<IRModule> irModule = builder->createModule(); - sharedBuilder->module = irModule; - builder->setInsertInto(irModule->getModuleInst()); + builder->setInsertInto(irModule); context->irBuilder = builder; |
