Skip to content

Commit 4ce713d

Browse files
nnethercoteZalathar
authored andcommitted
Refactor some ChunkedBitSet operations.
For less indentation, mostly.
1 parent 235a4c0 commit 4ce713d

File tree

1 file changed

+47
-41
lines changed

1 file changed

+47
-41
lines changed

compiler/rustc_index/src/bit_set.rs

Lines changed: 47 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -800,27 +800,29 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
800800
// words, and this happens often enough that it's a
801801
// performance win. Also, we only need to operate on the
802802
// in-use words, hence the slicing.
803-
let op = |a, b| a | b;
804803
let num_words = num_words(chunk_domain_size as usize);
805-
if bitwise_changes(
804+
let op = |a, b| a | b;
805+
if !bitwise_changes(
806806
&self_chunk_words[0..num_words],
807807
&other_chunk_words[0..num_words],
808808
op,
809809
) {
810-
let self_chunk_words = Rc::make_mut(self_chunk_words);
811-
let has_changed = bitwise(
812-
&mut self_chunk_words[0..num_words],
813-
&other_chunk_words[0..num_words],
814-
op,
815-
);
816-
debug_assert!(has_changed);
810+
continue;
811+
}
812+
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);
817820
*self_chunk_count =
818821
count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
819-
if *self_chunk_count == chunk_domain_size {
820-
*self_chunk = Ones;
821-
}
822-
changed = true;
822+
if *self_chunk_count == chunk_domain_size {
823+
*self_chunk = Ones;
823824
}
825+
changed = true;
824826
}
825827
}
826828
}
@@ -874,28 +876,30 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
874876
Mixed(self_chunk_count, self_chunk_words),
875877
Mixed(_other_chunk_count, other_chunk_words),
876878
) => {
877-
// See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation
878-
let op = |a: u64, b: u64| a & !b;
879+
// See `ChunkedBitSet::union` for details on what is happening here.
879880
let num_words = num_words(chunk_domain_size as usize);
880-
if bitwise_changes(
881+
let op = |a: u64, b: u64| a & !b;
882+
if !bitwise_changes(
881883
&self_chunk_words[0..num_words],
882884
&other_chunk_words[0..num_words],
883885
op,
884886
) {
885-
let self_chunk_words = Rc::make_mut(self_chunk_words);
886-
let has_changed = bitwise(
887-
&mut self_chunk_words[0..num_words],
888-
&other_chunk_words[0..num_words],
889-
op,
890-
);
891-
debug_assert!(has_changed);
887+
continue;
888+
}
889+
890+
let self_chunk_words = Rc::make_mut(self_chunk_words);
891+
let has_changed = bitwise(
892+
&mut self_chunk_words[0..num_words],
893+
&other_chunk_words[0..num_words],
894+
op,
895+
);
896+
debug_assert!(has_changed);
892897
*self_chunk_count =
893898
count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
894-
if *self_chunk_count == 0 {
895-
*self_chunk = Zeros;
896-
}
897-
changed = true;
899+
if *self_chunk_count == 0 {
900+
*self_chunk = Zeros;
898901
}
902+
changed = true;
899903
}
900904
}
901905
}
@@ -931,28 +935,30 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
931935
Mixed(self_chunk_count, self_chunk_words),
932936
Mixed(_other_chunk_count, other_chunk_words),
933937
) => {
934-
// See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation
935-
let op = |a, b| a & b;
938+
// See `ChunkedBitSet::union` for details on what is happening here.
936939
let num_words = num_words(chunk_domain_size as usize);
937-
if bitwise_changes(
940+
let op = |a, b| a & b;
941+
if !bitwise_changes(
938942
&self_chunk_words[0..num_words],
939943
&other_chunk_words[0..num_words],
940944
op,
941945
) {
942-
let self_chunk_words = Rc::make_mut(self_chunk_words);
943-
let has_changed = bitwise(
944-
&mut self_chunk_words[0..num_words],
945-
&other_chunk_words[0..num_words],
946-
op,
947-
);
948-
debug_assert!(has_changed);
946+
continue;
947+
}
948+
949+
let self_chunk_words = Rc::make_mut(self_chunk_words);
950+
let has_changed = bitwise(
951+
&mut self_chunk_words[0..num_words],
952+
&other_chunk_words[0..num_words],
953+
op,
954+
);
955+
debug_assert!(has_changed);
949956
*self_chunk_count =
950957
count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
951-
if *self_chunk_count == 0 {
952-
*self_chunk = Zeros;
953-
}
954-
changed = true;
958+
if *self_chunk_count == 0 {
959+
*self_chunk = Zeros;
955960
}
961+
changed = true;
956962
}
957963
}
958964
}

0 commit comments

Comments
 (0)