summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-ssa.cpp
diff options
context:
space:
mode:
authorSai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com>2023-01-30 11:46:36 -0500
committerGitHub <noreply@github.com>2023-01-30 08:46:36 -0800
commit134dd7eb26fc7988ae13559d276cbf337b4b9d27 (patch)
tree35bd06e6bebb4518bca805e14e85f8f9ef4341c6 /source/slang/slang-ir-ssa.cpp
parent4a66e9729175a89833e5db784bb64e6a7f60cdf2 (diff)
Overhauled reverse-mode control flow handling (#2608)
* Added switch-case support; fixed non-diff parameter transposition * Made region propagation much more robust. Partial loop unzip implementation * WIP: Added most loop handling code, and a test. Still untested * Added CFG Normalization pass + CFG Reversal Pass + Loop Unzipping + most loop transcription * Add single-iter-loop test. * proj files * removed comments * Update reverse-loop.slang * Removed out-of-date code * Disabled IR validation during constructSSA phase of normalizeCFG. constructSSA now reuses sharedBuilder * Moved normalizeCFG() call to prepareFuncForBackwardDiff()
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())