mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
fix some cfg logic around optimize_for_size and 16-bit targets
This commit is contained in:
parent
2933f68abe
commit
1151eb1c84
@ -1,4 +1,4 @@
|
||||
#![cfg_attr(feature = "optimize_for_size", allow(dead_code))]
|
||||
#![cfg_attr(any(feature = "optimize_for_size", target_pointer_width = "16"), allow(dead_code))]
|
||||
|
||||
use crate::marker::Freeze;
|
||||
|
||||
|
@ -1,22 +1,22 @@
|
||||
//! This module contains the entry points for `slice::sort`.
|
||||
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
use crate::cmp;
|
||||
use crate::intrinsics;
|
||||
use crate::mem::{self, MaybeUninit, SizedTypeProperties};
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
use crate::slice::sort::shared::smallsort::{
|
||||
SMALL_SORT_GENERAL_SCRATCH_LEN, StableSmallSortTypeImpl, insertion_sort_shift_left,
|
||||
};
|
||||
|
||||
pub(crate) mod merge;
|
||||
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
pub(crate) mod drift;
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
pub(crate) mod quicksort;
|
||||
|
||||
#[cfg(feature = "optimize_for_size")]
|
||||
#[cfg(any(feature = "optimize_for_size", target_pointer_width = "16"))]
|
||||
pub(crate) mod tiny;
|
||||
|
||||
/// Stable sort called driftsort by Orson Peters and Lukas Bergdoll.
|
||||
@ -45,7 +45,7 @@ pub fn sort<T, F: FnMut(&T, &T) -> bool, BufT: BufGuard<T>>(v: &mut [T], is_less
|
||||
|
||||
cfg_if! {
|
||||
if #[cfg(target_pointer_width = "16")] {
|
||||
let heap_buf = BufT::with_capacity(alloc_len);
|
||||
let mut heap_buf = BufT::with_capacity(alloc_len);
|
||||
let scratch = heap_buf.as_uninit_slice_mut();
|
||||
} else {
|
||||
// For small inputs 4KiB of stack storage suffices, which allows us to avoid
|
||||
@ -85,7 +85,7 @@ pub fn sort<T, F: FnMut(&T, &T) -> bool, BufT: BufGuard<T>>(v: &mut [T], is_less
|
||||
///
|
||||
/// Deliberately don't inline the main sorting routine entrypoint to ensure the
|
||||
/// inlined insertion sort i-cache footprint remains minimal.
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
#[inline(never)]
|
||||
fn driftsort_main<T, F: FnMut(&T, &T) -> bool, BufT: BufGuard<T>>(v: &mut [T], is_less: &mut F) {
|
||||
// By allocating n elements of memory we can ensure the entire input can
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
use crate::intrinsics;
|
||||
use crate::mem::SizedTypeProperties;
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
use crate::slice::sort::shared::find_existing_run;
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
use crate::slice::sort::shared::smallsort::insertion_sort_shift_left;
|
||||
|
||||
pub(crate) mod heapsort;
|
||||
@ -55,7 +55,7 @@ pub fn sort<T, F: FnMut(&T, &T) -> bool>(v: &mut [T], is_less: &mut F) {
|
||||
///
|
||||
/// Deliberately don't inline the main sorting routine entrypoint to ensure the
|
||||
/// inlined insertion sort i-cache footprint remains minimal.
|
||||
#[cfg(not(feature = "optimize_for_size"))]
|
||||
#[cfg(not(any(feature = "optimize_for_size", target_pointer_width = "16")))]
|
||||
#[inline(never)]
|
||||
fn ipnsort<T, F>(v: &mut [T], is_less: &mut F)
|
||||
where
|
||||
|
Loading…
Reference in New Issue
Block a user