summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-autodiff-transcriber-base.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-autodiff-transcriber-base.cpp')
-rw-r--r--source/slang/slang-ir-autodiff-transcriber-base.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/source/slang/slang-ir-autodiff-transcriber-base.cpp b/source/slang/slang-ir-autodiff-transcriber-base.cpp
index f4a34c5aa..a1fa5f21a 100644
--- a/source/slang/slang-ir-autodiff-transcriber-base.cpp
+++ b/source/slang/slang-ir-autodiff-transcriber-base.cpp
@@ -1079,6 +1079,20 @@ IRInst* getActualInstToTranscribe(IRInst* inst)
return inst;
}
+void handleNameHint(IRBuilder* builder, IRInst* primal, IRInst* diff)
+{
+ // Ignore types that already have a name hint.
+ if (as<IRType>(diff) && diff->findDecoration<IRNameHintDecoration>())
+ return;
+
+ if (auto nameHint = primal->findDecoration<IRNameHintDecoration>())
+ {
+ StringBuilder sb;
+ sb << "s_diff_" << nameHint->getName();
+ builder->addNameHintDecoration(diff, sb.getUnownedSlice());
+ }
+}
+
IRInst* AutoDiffTranscriberBase::transcribe(IRBuilder* builder, IRInst* origInst)
{
// If a differential instruction is already mapped for
@@ -1099,7 +1113,7 @@ IRInst* AutoDiffTranscriberBase::transcribe(IRBuilder* builder, IRInst* origInst
instsInProgress.remove(origInst);
- if (auto primalInst = pair.primal)
+ if (pair.primal)
{
mapPrimalInst(origInst, pair.primal);
mapDifferentialInst(origInst, pair.differential);
@@ -1124,12 +1138,7 @@ IRInst* AutoDiffTranscriberBase::transcribe(IRBuilder* builder, IRInst* origInst
break;
default:
// Generate name hint for the inst.
- if (auto primalNameHint = primalInst->findDecoration<IRNameHintDecoration>())
- {
- StringBuilder sb;
- sb << "s_diff_" << primalNameHint->getName();
- builder->addNameHintDecoration(pair.differential, sb.getUnownedSlice());
- }
+ handleNameHint(builder, pair.primal, pair.differential);
// Automatically tag the primal and differential results
// if they haven't already been handled by the