Skip to content

Commit

Permalink
Experiment: remove hack
Browse files Browse the repository at this point in the history
  • Loading branch information
Nadrieril committed Dec 16, 2023
1 parent 9a05cf2 commit 6ea816b
Showing 1 changed file with 6 additions and 17 deletions.
23 changes: 6 additions & 17 deletions compiler/rustc_mir_build/src/build/matches/test.rs
Expand Up @@ -216,6 +216,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {

target_blocks
};
let target_blocks = make_target_blocks(self);

let place = place_builder.to_place(self);
let place_ty = place.ty(&self.local_decls, self.tcx);
Expand All @@ -224,7 +225,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
let source_info = self.source_info(test.span);
match test.kind {
TestKind::Switch { adt_def, ref variants } => {
let target_blocks = make_target_blocks(self);
// Variants is a BitVec of indexes into adt_def.variants.
let num_enum_variants = adt_def.variants().len();
debug_assert_eq!(target_blocks.len(), num_enum_variants + 1);
Expand Down Expand Up @@ -270,7 +270,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
}

TestKind::SwitchInt { switch_ty, ref options } => {
let target_blocks = make_target_blocks(self);
let terminator = if *switch_ty.kind() == ty::Bool {
assert!(!options.is_empty() && options.len() <= 2);
let [first_bb, second_bb] = *target_blocks else {
Expand Down Expand Up @@ -340,7 +339,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
);
self.non_scalar_compare(
eq_block,
make_target_blocks,
target_blocks,
source_info,
value,
ref_str,
Expand All @@ -351,15 +350,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
if !ty.is_scalar() {
// Use `PartialEq::eq` instead of `BinOp::Eq`
// (the binop can only handle primitives)
self.non_scalar_compare(
block,
make_target_blocks,
source_info,
value,
place,
ty,
);
} else if let [success, fail] = *make_target_blocks(self) {
self.non_scalar_compare(block, target_blocks, source_info, value, place, ty);
} else if let [success, fail] = *target_blocks {
assert_eq!(value.ty(), ty);
let expect = self.literal_operand(test.span, value);
let val = Operand::Copy(place);
Expand All @@ -371,7 +363,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {

TestKind::Range(ref range) => {
let lower_bound_success = self.cfg.start_new_block();
let target_blocks = make_target_blocks(self);

// Test `val` by computing `lo <= val && val <= hi`, using primitive comparisons.
// FIXME: skip useless comparison when the range is half-open.
Expand Down Expand Up @@ -401,8 +392,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
}

TestKind::Len { len, op } => {
let target_blocks = make_target_blocks(self);

let usize_ty = self.tcx.types.usize;
let actual = self.temp(usize_ty, test.span);

Expand Down Expand Up @@ -466,7 +455,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
fn non_scalar_compare(
&mut self,
block: BasicBlock,
make_target_blocks: impl FnOnce(&mut Self) -> Vec<BasicBlock>,
target_blocks: Vec<BasicBlock>,
source_info: SourceInfo,
value: Const<'tcx>,
mut val: Place<'tcx>,
Expand Down Expand Up @@ -591,7 +580,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
);
self.diverge_from(block);

let [success_block, fail_block] = *make_target_blocks(self) else {
let [success_block, fail_block] = *target_blocks else {
bug!("`TestKind::Eq` should have two target blocks")
};
// check the result
Expand Down

0 comments on commit 6ea816b

Please sign in to comment.