Skip to content

Commit 7f156e7

Browse files
committed
Remove unused code
1 parent 8e3ab9a commit 7f156e7

File tree

3 files changed

+30
-149
lines changed

3 files changed

+30
-149
lines changed

compiler/rustc_builtin_macros/src/autodiff.rs

Lines changed: 16 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ mod llvm_enzyme {
7373
}
7474

7575
// Get information about the function the macro is applied to
76-
fn extract_item_info(iitem: &Box<ast::Item>) -> Option<(Visibility, FnSig, Ident, Generics, bool)> {
76+
fn extract_item_info(
77+
iitem: &Box<ast::Item>,
78+
) -> Option<(Visibility, FnSig, Ident, Generics, bool)> {
7779
match &iitem.kind {
7880
ItemKind::Fn(box ast::Fn { sig, ident, generics, .. }) => {
7981
Some((iitem.vis.clone(), sig.clone(), ident.clone(), generics.clone(), false))
@@ -259,7 +261,6 @@ mod llvm_enzyme {
259261
};
260262

261263
let has_ret = has_ret(&sig.decl.output);
262-
let sig_span = ecx.with_call_site_ctxt(sig.span);
263264

264265
// create TokenStream from vec elemtents:
265266
// meta_item doesn't have a .tokens field
@@ -328,24 +329,13 @@ mod llvm_enzyme {
328329
}
329330
let span = ecx.with_def_site_ctxt(expand_span);
330331

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

338-
// TODO(Sa4dUs): Remove this and all the related logic
339334
let d_body = gen_enzyme_body(
340335
ecx,
341-
&x,
342-
n_active,
343-
&sig,
344336
&d_sig,
345337
primal,
346-
&new_args,
347338
span,
348-
sig_span,
349339
idents,
350340
errored,
351341
first_ident(&meta_item_vec[0]),
@@ -358,7 +348,7 @@ mod llvm_enzyme {
358348
defaultness: ast::Defaultness::Final,
359349
sig: d_sig,
360350
ident: first_ident(&meta_item_vec[0]),
361-
generics: generics.clone(),
351+
generics,
362352
contract: None,
363353
body: Some(d_body),
364354
define_opaque: None,
@@ -539,7 +529,7 @@ mod llvm_enzyme {
539529
vec![
540530
Ident::from_str("std"),
541531
Ident::from_str("intrinsics"),
542-
Ident::from_str("enzyme_autodiff"),
532+
Ident::with_dummy_span(sym::enzyme_autodiff),
543533
],
544534
);
545535
let call_expr = ecx.expr_call(
@@ -552,7 +542,7 @@ mod llvm_enzyme {
552542
}
553543

554544
// Generate turbofish expression from fn name and generics
555-
// Given `foo` and `<A, B, C>`, gen `foo::<A, B, C>`
545+
// Given `foo` and `<A, B, C>` params, gen `foo::<A, B, C>`
556546
fn gen_turbofish_expr(
557547
ecx: &ExtCtxt<'_>,
558548
ident: Ident,
@@ -594,43 +584,28 @@ mod llvm_enzyme {
594584

595585
// Will generate a body of the type:
596586
// ```
597-
// {
598-
// unsafe {
599-
// asm!("NOP");
600-
// }
601-
// ::core::hint::black_box(primal(args));
602-
// ::core::hint::black_box((args, ret));
603-
// <This part remains to be done by following function>
587+
// primal(args);
588+
// std::intrinsics::enzyme_autodiff(primal, diff, (args))
604589
// }
605590
// ```
606591
fn init_body_helper(
607592
ecx: &ExtCtxt<'_>,
608593
span: Span,
609594
primal: Ident,
610-
_new_names: &[String],
611-
_sig_span: Span,
612-
new_decl_span: Span,
613595
idents: &[Ident],
614596
errored: bool,
615597
generics: &Generics,
616-
) -> (Box<ast::Block>, Box<ast::Expr>, Box<ast::Expr>, Box<ast::Expr>) {
617-
let blackbox_path = ecx.std_path(&[sym::hint, sym::black_box]);
598+
) -> Box<ast::Block> {
618599
let blackbox_call_expr = ecx.expr_path(ecx.path(span, blackbox_path));
619600
let primal_call = gen_primal_call(ecx, span, primal, idents, generics);
620-
let black_box_primal_call = ecx.expr_call(
621-
new_decl_span,
622-
blackbox_call_expr.clone(),
623-
thin_vec![primal_call.clone()],
624-
);
625-
626601
let mut body = ecx.block(span, ThinVec::new());
627602

628603
// This uses primal args which won't be available if we errored before
629604
if !errored {
630605
body.stmts.push(ecx.stmt_semi(primal_call.clone()));
631606
}
632607

633-
(body, primal_call, black_box_primal_call, blackbox_call_expr)
608+
body
634609
}
635610

636611
/// We only want this function to type-check, since we will replace the body
@@ -643,14 +618,9 @@ mod llvm_enzyme {
643618
/// from optimizing any arguments away.
644619
fn gen_enzyme_body(
645620
ecx: &ExtCtxt<'_>,
646-
_x: &AutoDiffAttrs,
647-
_n_active: u32,
648-
_sig: &ast::FnSig,
649621
d_sig: &ast::FnSig,
650622
primal: Ident,
651-
new_names: &[String],
652623
span: Span,
653-
sig_span: Span,
654624
idents: Vec<Ident>,
655625
errored: bool,
656626
diff_ident: Ident,
@@ -661,17 +631,7 @@ mod llvm_enzyme {
661631

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

676636
body.stmts.push(call_enzyme_autodiff(
677637
ecx,
@@ -768,7 +728,7 @@ mod llvm_enzyme {
768728
sig: &ast::FnSig,
769729
x: &AutoDiffAttrs,
770730
span: Span,
771-
) -> (ast::FnSig, Vec<String>, Vec<Ident>, bool) {
731+
) -> (ast::FnSig, Vec<Ident>, bool) {
772732
let dcx = ecx.sess.dcx();
773733
let has_ret = has_ret(&sig.decl.output);
774734
let sig_args = sig.decl.inputs.len() + if has_ret { 1 } else { 0 };
@@ -780,7 +740,7 @@ mod llvm_enzyme {
780740
found: num_activities,
781741
});
782742
// This is not the right signature, but we can continue parsing.
783-
return (sig.clone(), vec![], vec![], true);
743+
return (sig.clone(), vec![], true);
784744
}
785745
assert!(sig.decl.inputs.len() == x.input_activity.len());
786746
assert!(has_ret == x.has_ret_activity());
@@ -823,7 +783,7 @@ mod llvm_enzyme {
823783

824784
if errors {
825785
// This is not the right signature, but we can continue parsing.
826-
return (sig.clone(), new_inputs, idents, true);
786+
return (sig.clone(), idents, true);
827787
}
828788

829789
let unsafe_activities = x
@@ -1037,7 +997,7 @@ mod llvm_enzyme {
1037997
}
1038998
let d_sig = FnSig { header: d_header, decl: d_decl, span };
1039999
trace!("Generated signature: {:?}", d_sig);
1040-
(d_sig, new_inputs, idents, false)
1000+
(d_sig, idents, false)
10411001
}
10421002
}
10431003

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)