Skip to content

Commit 20cc4da

Browse files
committed
Refactor some ChunkedBitSet operations.
For less indentation, mostly.
1 parent ff6dc92 commit 20cc4da

File tree

1 file changed

+59
-53
lines changed

1 file changed

+59
-53
lines changed

compiler/rustc_index/src/bit_set.rs

Lines changed: 59 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -803,29 +803,31 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
803803
// words, and this happens often enough that it's a
804804
// performance win. Also, we only need to operate on the
805805
// in-use words, hence the slicing.
806-
let op = |a, b| a | b;
807806
let num_words = num_words(chunk_domain_size as usize);
808-
if bitwise_changes(
807+
let op = |a, b| a | b;
808+
if !bitwise_changes(
809809
&self_chunk_words[0..num_words],
810810
&other_chunk_words[0..num_words],
811811
op,
812812
) {
813-
let self_chunk_words = Rc::make_mut(self_chunk_words);
814-
let has_changed = bitwise(
815-
&mut self_chunk_words[0..num_words],
816-
&other_chunk_words[0..num_words],
817-
op,
818-
);
819-
debug_assert!(has_changed);
820-
*self_chunk_count = self_chunk_words[0..num_words]
821-
.iter()
822-
.map(|w| w.count_ones() as ChunkSize)
823-
.sum();
824-
if *self_chunk_count == chunk_domain_size {
825-
*self_chunk = Ones;
826-
}
827-
changed = true;
813+
continue;
828814
}
815+
816+
let self_chunk_words = Rc::make_mut(self_chunk_words);
817+
let has_changed = bitwise(
818+
&mut self_chunk_words[0..num_words],
819+
&other_chunk_words[0..num_words],
820+
op,
821+
);
822+
debug_assert!(has_changed);
823+
*self_chunk_count = self_chunk_words[0..num_words]
824+
.iter()
825+
.map(|w| w.count_ones() as ChunkSize)
826+
.sum();
827+
if *self_chunk_count == chunk_domain_size {
828+
*self_chunk = Ones;
829+
}
830+
changed = true;
829831
}
830832
}
831833
}
@@ -882,30 +884,32 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
882884
Mixed(self_chunk_count, self_chunk_words),
883885
Mixed(_other_chunk_count, other_chunk_words),
884886
) => {
885-
// See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation
886-
let op = |a: u64, b: u64| a & !b;
887+
// See `ChunkedBitSet::union` for details on what is happening here.
887888
let num_words = num_words(chunk_domain_size as usize);
888-
if bitwise_changes(
889+
let op = |a: u64, b: u64| a & !b;
890+
if !bitwise_changes(
889891
&self_chunk_words[0..num_words],
890892
&other_chunk_words[0..num_words],
891893
op,
892894
) {
893-
let self_chunk_words = Rc::make_mut(self_chunk_words);
894-
let has_changed = bitwise(
895-
&mut self_chunk_words[0..num_words],
896-
&other_chunk_words[0..num_words],
897-
op,
898-
);
899-
debug_assert!(has_changed);
900-
*self_chunk_count = self_chunk_words[0..num_words]
901-
.iter()
902-
.map(|w| w.count_ones() as ChunkSize)
903-
.sum();
904-
if *self_chunk_count == 0 {
905-
*self_chunk = Zeros;
906-
}
907-
changed = true;
895+
continue;
908896
}
897+
898+
let self_chunk_words = Rc::make_mut(self_chunk_words);
899+
let has_changed = bitwise(
900+
&mut self_chunk_words[0..num_words],
901+
&other_chunk_words[0..num_words],
902+
op,
903+
);
904+
debug_assert!(has_changed);
905+
*self_chunk_count = self_chunk_words[0..num_words]
906+
.iter()
907+
.map(|w| w.count_ones() as ChunkSize)
908+
.sum();
909+
if *self_chunk_count == 0 {
910+
*self_chunk = Zeros;
911+
}
912+
changed = true;
909913
}
910914
}
911915
}
@@ -941,30 +945,32 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
941945
Mixed(self_chunk_count, self_chunk_words),
942946
Mixed(_other_chunk_count, other_chunk_words),
943947
) => {
944-
// See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation
945-
let op = |a, b| a & b;
948+
// See `ChunkedBitSet::union` for details on what is happening here.
946949
let num_words = num_words(chunk_domain_size as usize);
947-
if bitwise_changes(
950+
let op = |a, b| a & b;
951+
if !bitwise_changes(
948952
&self_chunk_words[0..num_words],
949953
&other_chunk_words[0..num_words],
950954
op,
951955
) {
952-
let self_chunk_words = Rc::make_mut(self_chunk_words);
953-
let has_changed = bitwise(
954-
&mut self_chunk_words[0..num_words],
955-
&other_chunk_words[0..num_words],
956-
op,
957-
);
958-
debug_assert!(has_changed);
959-
*self_chunk_count = self_chunk_words[0..num_words]
960-
.iter()
961-
.map(|w| w.count_ones() as ChunkSize)
962-
.sum();
963-
if *self_chunk_count == 0 {
964-
*self_chunk = Zeros;
965-
}
966-
changed = true;
956+
continue;
957+
}
958+
959+
let self_chunk_words = Rc::make_mut(self_chunk_words);
960+
let has_changed = bitwise(
961+
&mut self_chunk_words[0..num_words],
962+
&other_chunk_words[0..num_words],
963+
op,
964+
);
965+
debug_assert!(has_changed);
966+
*self_chunk_count = self_chunk_words[0..num_words]
967+
.iter()
968+
.map(|w| w.count_ones() as ChunkSize)
969+
.sum();
970+
if *self_chunk_count == 0 {
971+
*self_chunk = Zeros;
967972
}
973+
changed = true;
968974
}
969975
}
970976
}

0 commit comments

Comments
 (0)