Remove STDARCH_DISABLE_DEDUP_GUARD as it was unused
This commit is contained in:
committed by
Amanieu d'Antras
parent
bc9e29d9be
commit
f2870b76fd
@@ -50,10 +50,6 @@ pub fn assert_instr(
|
||||
// testing for.
|
||||
let disable_assert_instr = std::env::var("STDARCH_DISABLE_ASSERT_INSTR").is_ok();
|
||||
|
||||
// Disable dedup guard. Only works if the LLVM MergeFunctions pass is disabled, e.g.
|
||||
// with `-Z merge-functions=disabled` in RUSTFLAGS.
|
||||
let disable_dedup_guard = std::env::var("STDARCH_DISABLE_DEDUP_GUARD").is_ok();
|
||||
|
||||
// If instruction tests are disabled avoid emitting this shim at all, just
|
||||
// return the original item without our attribute.
|
||||
if !cfg!(optimized) || disable_assert_instr {
|
||||
@@ -69,10 +65,6 @@ pub fn assert_instr(
|
||||
&format!("stdarch_test_shim_{name}_{instr_str}"),
|
||||
name.span(),
|
||||
);
|
||||
let shim_name_ptr = syn::Ident::new(
|
||||
&format!("stdarch_test_shim_{name}_{instr_str}_ptr").to_ascii_uppercase(),
|
||||
name.span(),
|
||||
);
|
||||
let mut inputs = Vec::new();
|
||||
let mut input_vals = Vec::new();
|
||||
let mut const_vals = Vec::new();
|
||||
@@ -138,41 +130,13 @@ pub fn assert_instr(
|
||||
} else {
|
||||
syn::LitStr::new("C", proc_macro2::Span::call_site())
|
||||
};
|
||||
let shim_name_str = format!("{shim_name}{assert_name}");
|
||||
let to_test = if disable_dedup_guard {
|
||||
quote! {
|
||||
#attrs
|
||||
#maybe_allow_deprecated
|
||||
#[unsafe(no_mangle)]
|
||||
#[inline(never)]
|
||||
pub unsafe extern #abi fn #shim_name(#(#inputs),*) #ret {
|
||||
#name::<#(#const_vals),*>(#(#input_vals),*)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
quote! {
|
||||
|
||||
const #shim_name_ptr : *const u8 = #shim_name_str.as_ptr();
|
||||
|
||||
#attrs
|
||||
#maybe_allow_deprecated
|
||||
#[unsafe(no_mangle)]
|
||||
#[inline(never)]
|
||||
pub unsafe extern #abi fn #shim_name(#(#inputs),*) #ret {
|
||||
// The compiler in optimized mode by default runs a pass called
|
||||
// "mergefunc" where it'll merge functions that look identical.
|
||||
// Turns out some intrinsics produce identical code and they're
|
||||
// folded together, meaning that one just jumps to another. This
|
||||
// messes up our inspection of the disassembly of this function and
|
||||
// we're not a huge fan of that.
|
||||
//
|
||||
// To thwart this pass and prevent functions from being merged we
|
||||
// generate some code that's hopefully very tight in terms of
|
||||
// codegen but is otherwise unique to prevent code from being
|
||||
// folded.
|
||||
::stdarch_test::_DONT_DEDUP = #shim_name_ptr;
|
||||
#name::<#(#const_vals),*>(#(#input_vals),*)
|
||||
}
|
||||
let to_test = quote! {
|
||||
#attrs
|
||||
#maybe_allow_deprecated
|
||||
#[unsafe(no_mangle)]
|
||||
#[inline(never)]
|
||||
pub unsafe extern #abi fn #shim_name(#(#inputs),*) #ret {
|
||||
#name::<#(#const_vals),*>(#(#input_vals),*)
|
||||
}
|
||||
};
|
||||
|
||||
@@ -182,9 +146,7 @@ pub fn assert_instr(
|
||||
fn #assert_name() {
|
||||
#to_test
|
||||
|
||||
::stdarch_test::assert(#shim_name as usize,
|
||||
stringify!(#shim_name),
|
||||
#instr);
|
||||
::stdarch_test::assert(#shim_name as usize, stringify!(#shim_name), #instr);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user