#[repr(u8)]pub enum Opt {
Show 40 variants
Memo = 0,
Tco = 1,
Peephole = 2,
Borrow = 3,
Specialize = 4,
Comptime = 5,
Inline = 6,
Unfold = 7,
Defunctionalize = 8,
LoopHoist = 9,
Unroll = 10,
LoopSplit = 11,
ClosedForm = 12,
Fuse = 13,
LoopCse = 14,
Cse = 15,
DeadCode = 16,
Scalarize = 17,
Affine = 18,
Interleave = 19,
Unbox = 20,
HoistBorrows = 21,
Narrow = 22,
NarrowVm = 23,
NarrowMap = 24,
DenseMap = 25,
ElemType = 26,
FastDiv = 27,
FloatStrength = 28,
Oracle = 29,
OracleHints = 30,
Unchecked = 31,
Simd = 32,
Cascade = 33,
IndexString = 34,
CapScale = 35,
Symmetry = 36,
Popcount = 37,
Saturate = 38,
Supercompile = 39,
}Expand description
Every optimization the compiler can toggle. The discriminant is the bit
index used by OptimizationConfig, so the order here is stable and must
not be reordered casually (it also defines conflict-resolution precedence:
an earlier variant wins a conflict against a later one).
Variants§
Memo = 0
Automatic memoization of pure functions.
Tco = 1
Tail-call optimization (self-tail-recursion → loop).
Peephole = 2
Peephole rewrites (swap, vec-fill, for-range, …).
Borrow = 3
Read-only / mutable borrow inference (&[T] / &mut [T] params).
Specialize = 4
Partial evaluation / polyvariant specialization.
Comptime = 5
Compile-time function evaluation (CTFE).
Inline = 6
Inlining of tiny and leaf helper functions.
Unfold = 7
Bounded unrolling of recursive functions.
Defunctionalize = 8
Defunctionalization (closures → first-order functions).
LoopHoist = 9
Loop-invariant code motion (LICM).
Unroll = 10
Loop unrolling of constant-trip loops.
LoopSplit = 11
Guard-based loop index-set splitting (for vectorization).
ClosedForm = 12
Accumulator-loop → closed-form recognition.
Fuse = 13
Deforestation (producer/consumer stream fusion).
LoopCse = 14
Loop-carried common-subexpression hoisting.
Cse = 15
Global value numbering / common-subexpression elimination.
DeadCode = 16
Dead-code elimination.
Scalarize = 17
Fixed-size sequence scalarization (SROA).
Affine = 18
Affine offset-array deletion → closed-form indexing.
Interleave = 19
Array-of-structs interleaving of co-indexed sequences.
Unbox = 20
De-Rc: unique-owned sequences become plain Vec.
HoistBorrows = 21
Hoisting borrow live-ranges out of loop nests.
Narrow = 22
i64→i32 sequence element narrowing (codegen).
NarrowVm = 23
i64→i32 sequence element narrowing (VM).
NarrowMap = 24
i64→i32 map-key narrowing.
DenseMap = 25
Sparse map → dense direct-addressed array.
ElemType = 26
Element-type narrowing via abstract interpretation.
FastDiv = 27
Constant-divisor magic-reciprocal division.
FloatStrength = 28
Float induction-variable strength reduction.
Oracle = 29
Abstract interpretation / oracle-fact production (interval analysis).
OracleHints = 30
Oracle-derived precise bounds-check guards.
Unchecked = 31
Oracle-proven unchecked indexing (get_unchecked).
Simd = 32
SIMD-vectorized search kernels.
Cascade = 33
Cascade folding of sequential comparisons.
IndexString = 34
Indexed string-search codegen.
CapScale = 35
Capacity-scaling buffer-fill simplification.
Symmetry = 36
Reflection symmetry breaking (bitmask search).
Popcount = 37
Popcount base-case collapse for bitmask search.
Saturate = 38
Equality-saturation rewriting (e-graph).
Supercompile = 39
Supercompilation (heavy residual specialization, AOT only).
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Opt
impl<'de> Deserialize<'de> for Opt
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<Opt, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<Opt, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Ord for Opt
impl Ord for Opt
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialOrd for Opt
impl PartialOrd for Opt
Source§impl Serialize for Opt
impl Serialize for Opt
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl Copy for Opt
impl Eq for Opt
impl StructuralPartialEq for Opt
Auto Trait Implementations§
impl Freeze for Opt
impl RefUnwindSafe for Opt
impl Send for Opt
impl Sync for Opt
impl Unpin for Opt
impl UnsafeUnpin for Opt
impl UnwindSafe for Opt
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.