summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir.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.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.cpp')
-rw-r--r--source/slang/slang-ir.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index 845232ae6..e72ba8c9f 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -4764,6 +4764,32 @@ namespace Slang
return inst;
}
+ IRInst* IRBuilder::emitLoop(
+ IRBlock* target,
+ IRBlock* breakBlock,
+ IRBlock* continueBlock,
+ Int argCount,
+ IRInst*const* args)
+ {
+ List<IRInst*> argList;
+
+ argList.add(target);
+ argList.add(breakBlock);
+ argList.add(continueBlock);
+
+ for (Count ii = 0; ii < argCount; ii++)
+ argList.add(args[ii]);
+
+ auto inst = createInst<IRLoop>(
+ this,
+ kIROp_loop,
+ nullptr,
+ argList.getCount(),
+ argList.getBuffer());
+ addInst(inst);
+ return inst;
+ }
+
IRInst* IRBuilder::emitBranch(
IRInst* val,
IRBlock* trueBlock,