//===--- PullbackCloner.h - Pullback function generation -----*- C++ -*----===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2019 - 2020 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // // This file defines a helper class for generating pullback functions for // automatic differentiation. // //===----------------------------------------------------------------------===// #ifndef SWIFT_SILOPTIMIZER_UTILS_DIFFERENTIATION_PULLBACKCLONER_H #define SWIFT_SILOPTIMIZER_UTILS_DIFFERENTIATION_PULLBACKCLONER_H namespace swift { namespace autodiff { class VJPCloner; /// A helper class for generating pullback functions. class PullbackCloner final { class Implementation; Implementation &impl; public: /// Creates a pullback cloner from a parent VJP cloner. /// /// The parent VJP cloner stores the original function and an empty /// to-be-generated pullback function. explicit PullbackCloner(VJPCloner &vjpCloner); ~PullbackCloner(); /// Performs pullback generation on the empty pullback function. Returns true /// if any error occurs. bool run(); }; } // end namespace autodiff } // end namespace swift #endif // SWIFT_SILOPTIMIZER_UTILS_DIFFERENTIATION_PULLBACKCLONER_H