Skip to content

Commit ff2818a

Browse files
authored
[AutoDiff] Simplify foldAutoDiffFunctionExtraction. (#24878)
Simplify condition for erasing `autodiff_function` instructions to be DCE.
1 parent 88d8b09 commit ff2818a

File tree

1 file changed

+5
-10
lines changed

1 file changed

+5
-10
lines changed

lib/SILOptimizer/Mandatory/Differentiation.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5937,23 +5937,19 @@ SILValue ADContext::promoteToDifferentiableFunction(
59375937

59385938
/// Fold `autodiff_function_extract` users of the given `autodiff_function`
59395939
/// instruction, directly replacing them with `autodiff_function` instruction
5940-
/// operands. If the `autodiff_function` instruction has no
5941-
/// non-`autodiff_function_extract` users, delete the instruction itself after
5942-
/// folding.
5940+
/// operands. If the `autodiff_function` instruction has no remaining uses,
5941+
/// delete the instruction itself after folding.
59435942
///
59445943
/// Folding can be disabled by the `SkipFoldingAutoDiffFunctionExtraction` flag
59455944
/// for SIL testing purposes.
59465945
static void foldAutoDiffFunctionExtraction(AutoDiffFunctionInst *source) {
5947-
bool hasOnlyAutoDiffFunctionExtractUsers = true;
59485946
// Iterate through all `autodiff_function` instruction uses.
59495947
for (auto use : source->getUses()) {
59505948
auto *adfei = dyn_cast<AutoDiffFunctionExtractInst>(use->getUser());
59515949
// If user is not an `autodiff_function_extract` instruction, set flag to
59525950
// false.
5953-
if (!adfei) {
5954-
hasOnlyAutoDiffFunctionExtractUsers = false;
5951+
if (!adfei)
59555952
continue;
5956-
}
59575953
// Fold original function extractors.
59585954
if (adfei->getExtractee() == AutoDiffFunctionExtractee::Original) {
59595955
auto originalFnValue = source->getOriginalFunction();
@@ -5967,9 +5963,8 @@ static void foldAutoDiffFunctionExtraction(AutoDiffFunctionInst *source) {
59675963
adfei->replaceAllUsesWith(assocFnValue);
59685964
adfei->eraseFromParent();
59695965
}
5970-
// If all users are `autodiff_function_extract` instructions, erase the
5971-
// `autodiff_function` instruction itself.
5972-
if (hasOnlyAutoDiffFunctionExtractUsers)
5966+
// If the `autodiff_function` instruction has no remaining uses, erase it.
5967+
if (isInstructionTriviallyDead(source))
59735968
source->eraseFromParent();
59745969
}
59755970

0 commit comments

Comments
 (0)