Skip to content

Commit e231c47

Browse files
committed
perf: UninhabitedEnumBranching void n^2
Avoid n² complexity. This showed up in a profile for match-stress-enum that has 8192 variants
1 parent ea7e131 commit e231c47

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

compiler/rustc_mir/src/transform/uninhabited_enum_branching.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//! A pass that eliminates branches on uninhabited enum variants.
22
33
use crate::transform::MirPass;
4+
use rustc_data_structures::stable_set::FxHashSet;
45
use rustc_middle::mir::{
56
BasicBlock, BasicBlockData, Body, Local, Operand, Rvalue, StatementKind, TerminatorKind,
67
};
@@ -52,9 +53,13 @@ fn variant_discriminants<'tcx>(
5253
layout: &TyAndLayout<'tcx>,
5354
ty: Ty<'tcx>,
5455
tcx: TyCtxt<'tcx>,
55-
) -> Vec<u128> {
56+
) -> FxHashSet<u128> {
5657
match &layout.variants {
57-
Variants::Single { index } => vec![index.as_u32() as u128],
58+
Variants::Single { index } => {
59+
let mut res = FxHashSet::default();
60+
res.insert(index.as_u32() as u128);
61+
res
62+
}
5863
Variants::Multiple { variants, .. } => variants
5964
.iter_enumerated()
6065
.filter_map(|(idx, layout)| {

0 commit comments

Comments
 (0)