summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-ssa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-ssa.cpp')
-rw-r--r--source/slang/slang-ir-ssa.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/source/slang/slang-ir-ssa.cpp b/source/slang/slang-ir-ssa.cpp
index 0bd5c6e9f..ee55a6546 100644
--- a/source/slang/slang-ir-ssa.cpp
+++ b/source/slang/slang-ir-ssa.cpp
@@ -84,7 +84,7 @@ struct ConstructSSAContext
Dictionary<IRBlock*, RefPtr<SSABlockInfo>> blockInfos;
// IR building state to use during the operation
- SharedIRBuilder sharedBuilder;
+ SharedIRBuilder* sharedBuilder;
// Instructions to remove during cleanup
List<IRInst*> instsToRemove;
@@ -1043,7 +1043,7 @@ static void breakCriticalEdges(
for (auto edge : criticalEdges)
{
- context->sharedBuilder.insertBlockAlongEdge(edge);
+ context->sharedBuilder->insertBlockAlongEdge(edge);
}
}
@@ -1205,7 +1205,8 @@ bool constructSSA(IRModule* module, IRGlobalValueWithCode* globalVal)
ConstructSSAContext context;
context.globalVal = globalVal;
- context.sharedBuilder.init(module);
+ SharedIRBuilder sharedBuilder(module);
+ context.sharedBuilder = &sharedBuilder;
context.builder.init(context.sharedBuilder);
context.builder.setInsertInto(module);
@@ -1213,6 +1214,22 @@ bool constructSSA(IRModule* module, IRGlobalValueWithCode* globalVal)
return constructSSA(&context);
}
+// Construct SSA form for a global value with code and reuse
+// an existing sharedBuilder
+//
+bool constructSSA(SharedIRBuilder* sharedBuilder, IRGlobalValueWithCode* globalVal)
+{
+ ConstructSSAContext context;
+ context.globalVal = globalVal;
+
+ context.sharedBuilder = sharedBuilder;
+
+ context.builder.init(sharedBuilder);
+ context.builder.setInsertInto(sharedBuilder->getModule());
+
+ return constructSSA(&context);
+}
+
bool constructSSA(IRModule* module, IRInst* globalVal)
{
switch (globalVal->getOp())