summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-init-local-var.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-02-01 14:18:57 -0800
committerGitHub <noreply@github.com>2023-02-01 14:18:57 -0800
commitbbd1e1786401bb88c34802b987d4da72e2364503 (patch)
tree99a4be95ae517fd710fc032a1debdac917dd3ac2 /source/slang/slang-ir-init-local-var.cpp
parentc5895fb0b82fd14fbe45b58d5fc7f75d67625d15 (diff)
Support `out` parameters in backward differentiation. (#2619)
* Support `out` parameters in backward differentiation. * Fixes. * Fix cleanup. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-init-local-var.cpp')
-rw-r--r--source/slang/slang-ir-init-local-var.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/source/slang/slang-ir-init-local-var.cpp b/source/slang/slang-ir-init-local-var.cpp
new file mode 100644
index 000000000..4b28db268
--- /dev/null
+++ b/source/slang/slang-ir-init-local-var.cpp
@@ -0,0 +1,34 @@
+// slang-ir-init-local-var.cpp
+#include "slang-ir-init-local-var.h"
+#include "slang-ir.h"
+#include "slang-ir-insts.h"
+
+namespace Slang
+{
+
+void initializeLocalVariables(SharedIRBuilder* sharedBuilder, IRGlobalValueWithCode* func)
+{
+ IRBuilder builder(sharedBuilder);
+ for (auto block : func->getBlocks())
+ {
+ for (auto inst : block->getChildren())
+ {
+ if (inst->getOp() == kIROp_Var)
+ {
+ auto firstUse = inst->firstUse;
+ bool initialized =
+ (firstUse && firstUse->getUser()->getOp() == kIROp_Store &&
+ firstUse->getUser()->getParent() == inst->getParent());
+ if (initialized)
+ continue;
+ builder.setInsertAfter(inst);
+ builder.emitStore(
+ inst,
+ builder.emitDefaultConstruct(
+ as<IRPtrTypeBase>(inst->getFullType())->getValueType()));
+ }
+ }
+ }
+}
+
+} // namespace Slang