diff --git a/lib/SILOptimizer/Mandatory/Differentiation.cpp b/lib/SILOptimizer/Mandatory/Differentiation.cpp index 64d2d312211ce..4cfeb78bdf3c5 100644 --- a/lib/SILOptimizer/Mandatory/Differentiation.cpp +++ b/lib/SILOptimizer/Mandatory/Differentiation.cpp @@ -1305,6 +1305,16 @@ void DifferentiableActivityInfo::analyze(DominanceInfo *di, if (isVaried(cai->getSrc(), i)) recursivelySetVariedIfDifferentiable(cai->getDest(), i); } + else if (auto *sei = dyn_cast(&inst)) { + if (isVaried(sei->getOperand(), i)) { + auto hasNoDeriv = sei->getField()->getAttrs() + .hasAttribute(); + if (!hasNoDeriv) { + for (auto result: inst.getResults()) + setVariedIfDifferentiable(result, i); + } + } + } // Handle everything else. else { for (auto &op : inst.getAllOperands())