Skip to content

Commit d0ae1fd

Browse files
committed
Remove unused code
1 parent fb32100 commit d0ae1fd

File tree

3 files changed

+27
-149
lines changed

3 files changed

+27
-149
lines changed

compiler/rustc_builtin_macros/src/autodiff.rs

Lines changed: 13 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,6 @@ mod llvm_enzyme {
262262
};
263263

264264
let has_ret = has_ret(&sig.decl.output);
265-
let sig_span = ecx.with_call_site_ctxt(sig.span);
266265

267266
// create TokenStream from vec elemtents:
268267
// meta_item doesn't have a .tokens field
@@ -331,24 +330,13 @@ mod llvm_enzyme {
331330
}
332331
let span = ecx.with_def_site_ctxt(expand_span);
333332

334-
let n_active: u32 = x
335-
.input_activity
336-
.iter()
337-
.filter(|a| **a == DiffActivity::Active || **a == DiffActivity::ActiveOnly)
338-
.count() as u32;
339-
let (d_sig, new_args, idents, errored) = gen_enzyme_decl(ecx, &sig, &x, span);
333+
let (d_sig, idents, errored) = gen_enzyme_decl(ecx, &sig, &x, span);
340334

341-
// TODO(Sa4dUs): Remove this and all the related logic
342335
let d_body = gen_enzyme_body(
343336
ecx,
344-
&x,
345-
n_active,
346-
&sig,
347337
&d_sig,
348338
primal,
349-
&new_args,
350339
span,
351-
sig_span,
352340
idents,
353341
errored,
354342
first_ident(&meta_item_vec[0]),
@@ -361,7 +349,7 @@ mod llvm_enzyme {
361349
defaultness: ast::Defaultness::Final,
362350
sig: d_sig,
363351
ident: first_ident(&meta_item_vec[0]),
364-
generics: generics.clone(),
352+
generics,
365353
contract: None,
366354
body: Some(d_body),
367355
define_opaque: None,
@@ -542,7 +530,7 @@ mod llvm_enzyme {
542530
vec![
543531
Ident::from_str("std"),
544532
Ident::from_str("intrinsics"),
545-
Ident::from_str("enzyme_autodiff"),
533+
Ident::with_dummy_span(sym::enzyme_autodiff),
546534
],
547535
);
548536
let call_expr = ecx.expr_call(
@@ -555,7 +543,7 @@ mod llvm_enzyme {
555543
}
556544

557545
// Generate turbofish expression from fn name and generics
558-
// Given `foo` and `<A, B, C>`, gen `foo::<A, B, C>`
546+
// Given `foo` and `<A, B, C>` params, gen `foo::<A, B, C>`
559547
fn gen_turbofish_expr(
560548
ecx: &ExtCtxt<'_>,
561549
ident: Ident,
@@ -597,43 +585,27 @@ mod llvm_enzyme {
597585

598586
// Will generate a body of the type:
599587
// ```
600-
// {
601-
// unsafe {
602-
// asm!("NOP");
603-
// }
604-
// ::core::hint::black_box(primal(args));
605-
// ::core::hint::black_box((args, ret));
606-
// <This part remains to be done by following function>
588+
// primal(args);
589+
// std::intrinsics::enzyme_autodiff(primal, diff, (args))
607590
// }
608591
// ```
609592
fn init_body_helper(
610593
ecx: &ExtCtxt<'_>,
611594
span: Span,
612595
primal: Ident,
613-
_new_names: &[String],
614-
_sig_span: Span,
615-
new_decl_span: Span,
616596
idents: &[Ident],
617597
errored: bool,
618598
generics: &Generics,
619-
) -> (P<ast::Block>, P<ast::Expr>, P<ast::Expr>, P<ast::Expr>) {
620-
let blackbox_path = ecx.std_path(&[sym::hint, sym::black_box]);
621-
let blackbox_call_expr = ecx.expr_path(ecx.path(span, blackbox_path));
599+
) -> P<ast::Block> {
622600
let primal_call = gen_primal_call(ecx, span, primal, idents, generics);
623-
let black_box_primal_call = ecx.expr_call(
624-
new_decl_span,
625-
blackbox_call_expr.clone(),
626-
thin_vec![primal_call.clone()],
627-
);
628-
629601
let mut body = ecx.block(span, ThinVec::new());
630602

631603
// This uses primal args which won't be available if we errored before
632604
if !errored {
633605
body.stmts.push(ecx.stmt_semi(primal_call.clone()));
634606
}
635607

636-
(body, primal_call, black_box_primal_call, blackbox_call_expr)
608+
body
637609
}
638610

639611
/// We only want this function to type-check, since we will replace the body
@@ -646,14 +618,9 @@ mod llvm_enzyme {
646618
/// from optimizing any arguments away.
647619
fn gen_enzyme_body(
648620
ecx: &ExtCtxt<'_>,
649-
_x: &AutoDiffAttrs,
650-
_n_active: u32,
651-
_sig: &ast::FnSig,
652621
d_sig: &ast::FnSig,
653622
primal: Ident,
654-
new_names: &[String],
655623
span: Span,
656-
sig_span: Span,
657624
idents: Vec<Ident>,
658625
errored: bool,
659626
diff_ident: Ident,
@@ -664,17 +631,7 @@ mod llvm_enzyme {
664631

665632
// Add a call to the primal function to prevent it from being inlined
666633
// and call `enzyme_autodiff` intrinsic (this also covers the return type)
667-
let (mut body, _primal_call, _bb_primal_call, _bb_call_expr) = init_body_helper(
668-
ecx,
669-
span,
670-
primal,
671-
new_names,
672-
sig_span,
673-
new_decl_span,
674-
&idents,
675-
errored,
676-
generics,
677-
);
634+
let mut body = init_body_helper(ecx, span, primal, &idents, errored, generics);
678635

679636
body.stmts.push(call_enzyme_autodiff(
680637
ecx,
@@ -771,7 +728,7 @@ mod llvm_enzyme {
771728
sig: &ast::FnSig,
772729
x: &AutoDiffAttrs,
773730
span: Span,
774-
) -> (ast::FnSig, Vec<String>, Vec<Ident>, bool) {
731+
) -> (ast::FnSig, Vec<Ident>, bool) {
775732
let dcx = ecx.sess.dcx();
776733
let has_ret = has_ret(&sig.decl.output);
777734
let sig_args = sig.decl.inputs.len() + if has_ret { 1 } else { 0 };
@@ -783,7 +740,7 @@ mod llvm_enzyme {
783740
found: num_activities,
784741
});
785742
// This is not the right signature, but we can continue parsing.
786-
return (sig.clone(), vec![], vec![], true);
743+
return (sig.clone(), vec![], true);
787744
}
788745
assert!(sig.decl.inputs.len() == x.input_activity.len());
789746
assert!(has_ret == x.has_ret_activity());
@@ -826,7 +783,7 @@ mod llvm_enzyme {
826783

827784
if errors {
828785
// This is not the right signature, but we can continue parsing.
829-
return (sig.clone(), new_inputs, idents, true);
786+
return (sig.clone(), idents, true);
830787
}
831788

832789
let unsafe_activities = x
@@ -1034,7 +991,7 @@ mod llvm_enzyme {
1034991
}
1035992
let d_sig = FnSig { header: d_header, decl: d_decl, span };
1036993
trace!("Generated signature: {:?}", d_sig);
1037-
(d_sig, new_inputs, idents, false)
994+
(d_sig, idents, false)
1038995
}
1039996
}
1040997

compiler/rustc_codegen_llvm/src/builder/autodiff.rs

Lines changed: 11 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,18 @@
11
use std::ptr;
22

3-
use rustc_ast::expand::autodiff_attrs::{AutoDiffAttrs, AutoDiffItem, DiffActivity, DiffMode};
4-
use rustc_codegen_ssa::ModuleCodegen;
3+
use rustc_ast::expand::autodiff_attrs::{AutoDiffAttrs, DiffActivity, DiffMode};
54
use rustc_codegen_ssa::common::TypeKind;
65
use rustc_codegen_ssa::traits::{BaseTypeCodegenMethods, BuilderMethods};
7-
use rustc_errors::FatalError;
86
use rustc_middle::bug;
9-
use tracing::{debug, trace};
7+
use tracing::debug;
108

11-
use crate::back::write::llvm_err;
129
use crate::builder::{Builder, PlaceRef, UNNAMED};
1310
use crate::context::SimpleCx;
1411
use crate::declare::declare_simple_fn;
15-
use crate::errors::{AutoDiffWithoutEnable, LlvmError};
1612
use crate::llvm::AttributePlace::Function;
1713
use crate::llvm::{Metadata, True, Type};
1814
use crate::value::Value;
19-
use crate::{CodegenContext, LlvmCodegenBackend, ModuleLlvm, attributes, llvm};
20-
21-
fn _get_params(fnc: &Value) -> Vec<&Value> {
22-
let param_num = llvm::LLVMCountParams(fnc) as usize;
23-
let mut fnc_args: Vec<&Value> = vec![];
24-
fnc_args.reserve(param_num);
25-
unsafe {
26-
llvm::LLVMGetParams(fnc, fnc_args.as_mut_ptr());
27-
fnc_args.set_len(param_num);
28-
}
29-
fnc_args
30-
}
31-
32-
fn _has_sret(fnc: &Value) -> bool {
33-
let num_args = llvm::LLVMCountParams(fnc) as usize;
34-
if num_args == 0 {
35-
false
36-
} else {
37-
unsafe { llvm::LLVMRustHasAttributeAtIndex(fnc, 0, llvm::AttributeKind::StructRet) }
38-
}
39-
}
15+
use crate::{attributes, llvm};
4016

4117
// When we call the `__enzyme_autodiff` or `__enzyme_fwddiff` function, we need to pass all the
4218
// original inputs, as well as metadata and the additional shadow arguments.
@@ -66,12 +42,12 @@ fn match_args_from_caller_to_enzyme<'ll, 'tcx>(
6642
let mut outer_pos: usize = 0;
6743
let mut activity_pos = 0;
6844

69-
let enzyme_const = cx.create_metadata("enzyme_const".to_string()).unwrap();
70-
let enzyme_out = cx.create_metadata("enzyme_out".to_string()).unwrap();
71-
let enzyme_dup = cx.create_metadata("enzyme_dup".to_string()).unwrap();
72-
let enzyme_dupv = cx.create_metadata("enzyme_dupv".to_string()).unwrap();
73-
let enzyme_dupnoneed = cx.create_metadata("enzyme_dupnoneed".to_string()).unwrap();
74-
let enzyme_dupnoneedv = cx.create_metadata("enzyme_dupnoneedv".to_string()).unwrap();
45+
let enzyme_const = cx.create_metadata(b"enzyme_const");
46+
let enzyme_out = cx.create_metadata(b"enzyme_out");
47+
let enzyme_dup = cx.create_metadata(b"enzyme_dup");
48+
let enzyme_dupv = cx.create_metadata(b"enzyme_dupv");
49+
let enzyme_dupnoneed = cx.create_metadata(b"enzyme_dupnoneed");
50+
let enzyme_dupnoneedv = cx.create_metadata(b"enzyme_dupnoneedv");
7551

7652
while activity_pos < inputs.len() {
7753
let diff_activity = inputs[activity_pos as usize];
@@ -264,12 +240,12 @@ pub(crate) fn generate_enzyme_call<'ll, 'tcx>(
264240
let mut args = Vec::with_capacity(num_args as usize + 1);
265241
args.push(fn_to_diff);
266242

267-
let enzyme_primal_ret = cx.create_metadata("enzyme_primal_return".to_string()).unwrap();
243+
let enzyme_primal_ret = cx.create_metadata(b"enzyme_primal_return");
268244
if matches!(attrs.ret_activity, DiffActivity::Dual | DiffActivity::Active) {
269245
args.push(cx.get_metadata_value(enzyme_primal_ret));
270246
}
271247
if attrs.width > 1 {
272-
let enzyme_width = cx.create_metadata("enzyme_width".to_string()).unwrap();
248+
let enzyme_width = cx.create_metadata(b"enzyme_width");
273249
args.push(cx.get_metadata_value(enzyme_width));
274250
args.push(cx.get_const_int(cx.type_i64(), attrs.width as u64));
275251
}
@@ -287,61 +263,3 @@ pub(crate) fn generate_enzyme_call<'ll, 'tcx>(
287263

288264
builder.store_to_place(call, dest.val);
289265
}
290-
291-
pub(crate) fn differentiate<'ll>(
292-
module: &'ll ModuleCodegen<ModuleLlvm>,
293-
cgcx: &CodegenContext<LlvmCodegenBackend>,
294-
diff_items: Vec<AutoDiffItem>,
295-
) -> Result<(), FatalError> {
296-
// TODO(Sa4dUs): delete all this logic
297-
for item in &diff_items {
298-
trace!("{}", item);
299-
}
300-
301-
let diag_handler = cgcx.create_dcx();
302-
303-
let cx = SimpleCx::new(module.module_llvm.llmod(), module.module_llvm.llcx, cgcx.pointer_size);
304-
305-
// First of all, did the user try to use autodiff without using the -Zautodiff=Enable flag?
306-
if !diff_items.is_empty()
307-
&& !cgcx.opts.unstable_opts.autodiff.contains(&rustc_session::config::AutoDiff::Enable)
308-
{
309-
return Err(diag_handler.handle().emit_almost_fatal(AutoDiffWithoutEnable));
310-
}
311-
312-
// Here we replace the placeholder code with the actual autodiff code, which calls Enzyme.
313-
for item in diff_items.iter() {
314-
let name = item.source.clone();
315-
let fn_def: Option<&llvm::Value> = cx.get_function(&name);
316-
let Some(_fn_def) = fn_def else {
317-
return Err(llvm_err(
318-
diag_handler.handle(),
319-
LlvmError::PrepareAutoDiff {
320-
src: item.source.clone(),
321-
target: item.target.clone(),
322-
error: "could not find source function".to_owned(),
323-
},
324-
));
325-
};
326-
debug!(?item.target);
327-
let fn_target: Option<&llvm::Value> = cx.get_function(&item.target);
328-
let Some(_fn_target) = fn_target else {
329-
return Err(llvm_err(
330-
diag_handler.handle(),
331-
LlvmError::PrepareAutoDiff {
332-
src: item.source.clone(),
333-
target: item.target.clone(),
334-
error: "could not find target function".to_owned(),
335-
},
336-
));
337-
};
338-
339-
// generate_enzyme_call(&cx, fn_def, fn_target, item.attrs.clone());
340-
}
341-
342-
// FIXME(ZuseZ4): support SanitizeHWAddress and prevent illegal/unsupported opts
343-
344-
trace!("done with differentiate()");
345-
346-
Ok(())
347-
}

compiler/rustc_codegen_llvm/src/errors.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@ impl<G: EmissionGuarantee> Diagnostic<'_, G> for ParseTargetMachineConfig<'_> {
3232
}
3333
}
3434

35+
// TODO(Sa4dUs): we will need to reintroduce these errors somewhere
36+
/*
3537
#[derive(Diagnostic)]
3638
#[diag(codegen_llvm_autodiff_without_enable)]
3739
pub(crate) struct AutoDiffWithoutEnable;
40+
*/
3841

3942
#[derive(Diagnostic)]
4043
#[diag(codegen_llvm_lto_bitcode_from_rlib)]

0 commit comments

Comments
 (0)