Skip to content

Commit eaefd71

Browse files
vguerrarxwei
authored andcommitted
[TF-935] Replaces '-Xllvm -run-jvp-generation' by '-enable-experiment… (#27861)
…al-forward-mode-differentiation'. -enable-experimental-forward-mode-differentiation is a frontend option that is clearer on it's intent and more accessible. It defaults to false. Resolves [TF-935](https://bugs.swift.org/browse/TF-935).
1 parent 051e6e0 commit eaefd71

File tree

8 files changed

+27
-13
lines changed

8 files changed

+27
-13
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,11 @@ namespace swift {
331331
/// `@differentiable` declaration attribute, etc.
332332
bool EnableExperimentalDifferentiableProgramming = false;
333333

334+
// SWIFT_ENABLE_TENSORFLOW
335+
/// Whether to enable forward mode differentiation.
336+
bool EnableExperimentalForwardModeDifferentiation = false;
337+
// SWIFT_ENABLE_TENSORFLOW END
338+
334339
/// Whether to enable #quote, #unquote and @quoted.
335340
bool EnableExperimentalQuasiquotes = false;
336341

include/swift/Option/Options.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,12 @@ def disable_bridging_pch : Flag<["-"], "disable-bridging-pch">,
428428
def enable_experimental_differentiable_programming : Flag<["-"], "enable-experimental-differentiable-programming">,
429429
Flags<[FrontendOption]>,
430430
HelpText<"Enable experimental differentiable programming features">;
431+
// SWIFT_ENABLE_TENSORFLOW
432+
// NOTE: This flag will be removed when JVP/differential generation is robust.
433+
def enable_experimental_forward_mode_differentiation : Flag<["-"], "enable-experimental-forward-mode-differentiation">,
434+
Flags<[FrontendOption]>,
435+
HelpText<"Enable experimental forward mode differentiation">;
436+
// SWIFT_ENABLE_TENSORFLOW END
431437

432438
def enable_experimental_quasiquotes : Flag<["-"], "enable-experimental-quasiquotes">,
433439
Flags<[FrontendOption]>,

lib/Driver/ToolChains.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,10 @@ static void addCommonFrontendArgs(const ToolChain &TC, const OutputInfo &OI,
231231
options::OPT_enable_experimental_dependencies);
232232
inputArgs.AddLastArg(arguments,
233233
options::OPT_experimental_dependency_include_intrafile);
234+
// SWIFT_ENABLE_TENSORFLOW
235+
inputArgs.AddLastArg(
236+
arguments, options::OPT_enable_experimental_forward_mode_differentiation);
237+
// SWIFT_ENABLE_TENSORFLOW END
234238
inputArgs.AddLastArg(arguments,
235239
options::OPT_enable_experimental_quasiquotes);
236240
inputArgs.AddLastArg(arguments, options::OPT_package_description_version);

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
358358
if (Args.hasArg(OPT_experimental_dependency_include_intrafile))
359359
Opts.ExperimentalDependenciesIncludeIntrafileOnes = true;
360360

361+
// TODO: Ignore if enable-experimental-differentiable-programming is false
362+
Opts.EnableExperimentalForwardModeDifferentiation |=
363+
Args.hasArg(OPT_enable_experimental_forward_mode_differentiation);
361364
if (Args.hasArg(OPT_enable_experimental_quasiquotes))
362365
Opts.EnableExperimentalQuasiquotes = true;
363366

lib/SILOptimizer/Mandatory/Differentiation.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,6 @@ static llvm::cl::opt<bool> SkipFoldingDifferentiableFunctionExtraction(
6464
"differentiation-skip-folding-differentiable-function-extraction",
6565
llvm::cl::init(true));
6666

67-
/// This flag is used to enable full JVP generation.
68-
/// It will be removed when JVP/differential generation is robust.
69-
static llvm::cl::opt<bool> RunJVPGeneration(
70-
"run-jvp-generation",
71-
llvm::cl::init(false));
72-
7367
//===----------------------------------------------------------------------===//
7468
// Helpers
7569
//===----------------------------------------------------------------------===//
@@ -8030,8 +8024,9 @@ bool ADContext::processDifferentiableAttribute(
80308024
// Diagnose:
80318025
// - Functions with no return.
80328026
// - Functions with unsupported control flow.
8033-
if (RunJVPGeneration && (diagnoseNoReturn(*this, original, invoker) ||
8034-
diagnoseUnsupportedControlFlow(*this, original, invoker)))
8027+
if (getASTContext().LangOpts.EnableExperimentalForwardModeDifferentiation &&
8028+
(diagnoseNoReturn(*this, original, invoker) ||
8029+
diagnoseUnsupportedControlFlow(*this, original, invoker)))
80358030
return true;
80368031

80378032
jvp = createEmptyJVP(*this, original, attr, isDerivativeFnExported);
@@ -8041,7 +8036,8 @@ bool ADContext::processDifferentiableAttribute(
80418036
// does not exist. If custom VJP exists but custom JVP does not, skip JVP
80428037
// generation because generated JVP may not match semantics of custom VJP.
80438038
// Instead, create an empty JVP.
8044-
if (RunJVPGeneration && !vjp) {
8039+
if (getASTContext().LangOpts.EnableExperimentalForwardModeDifferentiation &&
8040+
!vjp) {
80458041
// JVP and differential generation do not currently support functions with
80468042
// multiple basic blocks.
80478043
if (original->getBlocks().size() > 1) {

test/AutoDiff/forward_mode_diagnostics.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-frontend -Xllvm -run-jvp-generation -emit-sil -verify %s
1+
// RUN: %target-swift-frontend -enable-experimental-forward-mode-differentiation -emit-sil -verify %s
22

33
// TODO: move these tests back into `autodiff_diagnostics.swift` once
44
// forward mode reaches feature parity with reverse mode.

test/AutoDiff/forward_mode_sil.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-frontend -emit-sil -verify -Xllvm -run-jvp-generation -Xllvm -debug-only=differentiation %s 2>&1 | %FileCheck %s -check-prefix=CHECK-DATA-STRUCTURES
2-
// RUN: %target-swift-frontend -emit-sil -verify -Xllvm -sil-print-after=differentiation -Xllvm -run-jvp-generation -o /dev/null 2>&1 %s | %FileCheck %s -check-prefix=CHECK-SIL
1+
// RUN: %target-swift-frontend -emit-sil -verify -enable-experimental-forward-mode-differentiation -Xllvm -debug-only=differentiation %s 2>&1 | %FileCheck %s -check-prefix=CHECK-DATA-STRUCTURES
2+
// RUN: %target-swift-frontend -emit-sil -verify -Xllvm -sil-print-after=differentiation -enable-experimental-forward-mode-differentiation -o /dev/null 2>&1 %s | %FileCheck %s -check-prefix=CHECK-SIL
33
// REQUIRES: asserts
44

55

test/lit.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1538,7 +1538,7 @@ if not getattr(config, 'target_run_simple_swift', None):
15381538
# TODO: Remove when forward mode AD support is robust.
15391539
config.target_run_simple_swift_forward_mode_differentiation = (
15401540
'%%empty-directory(%%t) && '
1541-
'%s %s %%s -Xllvm -run-jvp-generation -o %%t/a.out %s -module-name main && '
1541+
'%s %s %%s -enable-experimental-forward-mode-differentiation -o %%t/a.out %s -module-name main && '
15421542
'%s %%t/a.out &&'
15431543
'%s %%t/a.out'
15441544
% (config.target_build_swift, mcp_opt, swift_tensorflow_extra_options, config.target_codesign, config.target_run))

0 commit comments

Comments
 (0)