summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
-rw-r--r--source/slang/slang-lower-to-ir.cpp74
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;