[mir-opt] Disable the ConsideredEqual logic in SimplifyBranchSame opt · rust-lang/rust@dbd7226 (original) (raw)

Original file line number Diff line number Diff line change
@@ -612,7 +612,7 @@ impl<'a, 'tcx> SimplifyBranchSameOptimizationFinder<'a, 'tcx> {
612 612 && bb_l.terminator().kind == bb_r.terminator().kind;
613 613 let statement_check = |
614 614 bb_l.statements.iter().zip(&bb_r.statements).try_fold(StatementEquality::TrivialEqual, |acc,(l,r)
615 -let stmt_equality = self.statement_equality(*adt_matched_on, &l, bb_l_idx, &r, bb_r_idx);
615 +let stmt_equality = self.statement_equality(*adt_matched_on, &l, bb_l_idx, &r, bb_r_idx, self.tcx.sess.opts.debugging_opts.mir_opt_level);
616 616 if matches!(stmt_equality, StatementEquality::NotEqual) {
617 617 // short circuit
618 618 None
@@ -672,6 +672,7 @@ impl<'a, 'tcx> SimplifyBranchSameOptimizationFinder<'a, 'tcx> {
672 672 x_bb_idx: BasicBlock,
673 673 y: &Statement<'tcx>,
674 674 y_bb_idx: BasicBlock,
675 +mir_opt_level: usize,
675 676 ) -> StatementEquality {
676 677 let helper = |rhs: &Rvalue<'tcx>,
677 678 place: &Place<'tcx>,
@@ -690,7 +691,13 @@ impl<'a, 'tcx> SimplifyBranchSameOptimizationFinder<'a, 'tcx> {
690 691
691 692 match rhs {
692 693 Rvalue::Use(operand) if operand.place() == Some(adt_matched_on) => {
693 -StatementEquality::ConsideredEqual(side_to_choose)
694 +// FIXME(76803): This logic is currently broken because it does not take into
695 +// account the current discriminant value.
696 +if mir_opt_level > 2 {
697 +StatementEquality::ConsideredEqual(side_to_choose)
698 +} else {
699 +StatementEquality::NotEqual
700 +}
694 701 }
695 702 _ => {
696 703 trace!(