Skip to content

Commit

Permalink
Single commit implementing the enzyme/autodiff frontend
Browse files Browse the repository at this point in the history
Co-authored-by: Lorenz Schmidt <[email protected]>
  • Loading branch information
ZuseZ4 and bytesnake committed Oct 11, 2024
1 parent 7fdd545 commit 2b6b22c
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
9 changes: 9 additions & 0 deletions core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,15 @@ pub mod assert_matches {
pub use crate::macros::{assert_matches, debug_assert_matches};
}

// We don't export this through #[macro_export] for now, to avoid breakage.
#[cfg(not(bootstrap))]
#[unstable(feature = "autodiff", issue = "124509")]
/// Unstable module containing the unstable `autodiff` macro.
pub mod autodiff {
#[unstable(feature = "autodiff", issue = "124509")]
pub use crate::macros::builtin::autodiff;
}

#[unstable(feature = "cfg_match", issue = "115585")]
pub use crate::macros::cfg_match;

Expand Down
18 changes: 18 additions & 0 deletions core/src/macros/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1539,6 +1539,24 @@ pub(crate) mod builtin {
($file:expr $(,)?) => {{ /* compiler built-in */ }};
}

/// Automatic Differentiation macro which allows generating a new function to compute
/// the derivative of a given function. It may only be applied to a function.
/// The expected usage syntax is
/// `#[autodiff(NAME, MODE, INPUT_ACTIVITIES, OUTPUT_ACTIVITY)]`
/// where:
/// NAME is a string that represents a valid function name.
/// MODE is any of Forward, Reverse, ForwardFirst, ReverseFirst.
/// INPUT_ACTIVITIES consists of one valid activity for each input parameter.
/// OUTPUT_ACTIVITY must not be set if we implicitely return nothing (or explicitely return
/// `-> ()`. Otherwise it must be set to one of the allowed activities.
#[unstable(feature = "autodiff", issue = "124509")]
#[allow_internal_unstable(rustc_attrs)]
#[rustc_builtin_macro]
#[cfg(not(bootstrap))]
pub macro autodiff($item:item) {
/* compiler built-in */
}

/// Asserts that a boolean expression is `true` at runtime.
///
/// This will invoke the [`panic!`] macro if the provided expression cannot be
Expand Down
9 changes: 8 additions & 1 deletion std/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@
#![allow(unused_features)]
//
// Features:
#![cfg_attr(not(bootstrap), feature(autodiff))]
#![cfg_attr(test, feature(internal_output_capture, print_internals, update_panic_count, rt))]
#![cfg_attr(
all(target_vendor = "fortanix", target_env = "sgx"),
Expand Down Expand Up @@ -627,7 +628,13 @@ pub mod simd {
#[doc(inline)]
pub use crate::std_float::StdFloat;
}

#[cfg(not(bootstrap))]
#[unstable(feature = "autodiff", issue = "124509")]
/// This module provides support for automatic differentiation.
pub mod autodiff {
/// This macro handles automatic differentiation.
pub use core::autodiff::autodiff;
}
#[stable(feature = "futures_api", since = "1.36.0")]
pub mod task {
//! Types and Traits for working with asynchronous tasks.
Expand Down

0 comments on commit 2b6b22c

Please sign in to comment.