Skip to content

Commit facb9ac

Browse files
committed
Refactor some ChunkedBitSet operations.
For less indentation, mostly.
1 parent 235a4c0 commit facb9ac

File tree

1 file changed

+50
-47
lines changed

1 file changed

+50
-47
lines changed

compiler/rustc_index/src/bit_set.rs

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -800,27 +800,28 @@ 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);
817-
*self_chunk_count =
818-
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;
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);
820+
*self_chunk_count = count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
821+
if *self_chunk_count == chunk_domain_size {
822+
*self_chunk = Ones;
823823
}
824+
changed = true;
824825
}
825826
}
826827
}
@@ -874,28 +875,29 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
874875
Mixed(self_chunk_count, self_chunk_words),
875876
Mixed(_other_chunk_count, other_chunk_words),
876877
) => {
877-
// See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation
878-
let op = |a: u64, b: u64| a & !b;
878+
// See `ChunkedBitSet::union` for details on what is happening here.
879879
let num_words = num_words(chunk_domain_size as usize);
880-
if bitwise_changes(
880+
let op = |a: u64, b: u64| a & !b;
881+
if !bitwise_changes(
881882
&self_chunk_words[0..num_words],
882883
&other_chunk_words[0..num_words],
883884
op,
884885
) {
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);
892-
*self_chunk_count =
893-
count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
894-
if *self_chunk_count == 0 {
895-
*self_chunk = Zeros;
896-
}
897-
changed = true;
886+
continue;
887+
}
888+
889+
let self_chunk_words = Rc::make_mut(self_chunk_words);
890+
let has_changed = bitwise(
891+
&mut self_chunk_words[0..num_words],
892+
&other_chunk_words[0..num_words],
893+
op,
894+
);
895+
debug_assert!(has_changed);
896+
*self_chunk_count = count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
897+
if *self_chunk_count == 0 {
898+
*self_chunk = Zeros;
898899
}
900+
changed = true;
899901
}
900902
}
901903
}
@@ -931,28 +933,29 @@ impl<T: Idx> BitRelations<ChunkedBitSet<T>> for ChunkedBitSet<T> {
931933
Mixed(self_chunk_count, self_chunk_words),
932934
Mixed(_other_chunk_count, other_chunk_words),
933935
) => {
934-
// See [`<Self as BitRelations<ChunkedBitSet<T>>>::union`] for the explanation
935-
let op = |a, b| a & b;
936+
// See `ChunkedBitSet::union` for details on what is happening here.
936937
let num_words = num_words(chunk_domain_size as usize);
937-
if bitwise_changes(
938+
let op = |a, b| a & b;
939+
if !bitwise_changes(
938940
&self_chunk_words[0..num_words],
939941
&other_chunk_words[0..num_words],
940942
op,
941943
) {
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);
949-
*self_chunk_count =
950-
count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
951-
if *self_chunk_count == 0 {
952-
*self_chunk = Zeros;
953-
}
954-
changed = true;
944+
continue;
955945
}
946+
947+
let self_chunk_words = Rc::make_mut(self_chunk_words);
948+
let has_changed = bitwise(
949+
&mut self_chunk_words[0..num_words],
950+
&other_chunk_words[0..num_words],
951+
op,
952+
);
953+
debug_assert!(has_changed);
954+
*self_chunk_count = count_ones(&self_chunk_words[0..num_words]) as ChunkSize;
955+
if *self_chunk_count == 0 {
956+
*self_chunk = Zeros;
957+
}
958+
changed = true;
956959
}
957960
}
958961
}

0 commit comments

Comments
 (0)