summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir.cpp
diff options
context:
space:
mode:
authorSai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com>2025-02-25 12:04:31 -0800
committerGitHub <noreply@github.com>2025-02-25 12:04:31 -0800
commitf7b9745e46db6a7e55f6e0265493350d65ea4615 (patch)
treefb74e013a1c57876c7b94299367c6b9b8343784f /source/slang/slang-ir.cpp
parenta9f2f8a592c4514cd116c947486055788092ea56 (diff)
Fix a bug with hoisting 'IRVar' insts that are used outside the loop (#6446)
* Fix a bug with hoisting 'IRVar' insts that are used outside the loop - We introduce a 'CheckpointObject' inst and use that to split loop state insts into two pieces (one for within-loop uses and one for outside-loop uses. - This allows the two kinds of uses to be handled separately by the hoisting mechanism - CheckpointObject is then lowered to a no-op after hoisting is complete. * Update slang-ir-autodiff-primal-hoist.cpp * Update slang-ir-autodiff-primal-hoist.cpp
Diffstat (limited to 'source/slang/slang-ir.cpp')
-rw-r--r--source/slang/slang-ir.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index fb274c4a0..3a7ace37d 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -5664,6 +5664,13 @@ IRInst* IRBuilder::emitDiscard()
return inst;
}
+IRInst* IRBuilder::emitCheckpointObject(IRInst* value)
+{
+ auto inst =
+ createInst<IRCheckpointObject>(this, kIROp_CheckpointObject, value->getFullType(), value);
+ addInst(inst);
+ return inst;
+}
IRInst* IRBuilder::emitBranch(IRBlock* pBlock)
{