@@ -403,30 +403,6 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
403403                let  cmp = bx. icmp ( IntPredicate :: IntEQ ,  discr_value,  llval) ; 
404404                bx. cond_br_with_expect ( cmp,  lltarget,  llotherwise,  expect) ; 
405405            } 
406-         }  else  if  target_iter. len ( )  == 2 
407-             && self . mir [ targets. otherwise ( ) ] . is_empty_unreachable ( ) 
408-             && targets. all_values ( ) . contains ( & Pu128 ( 0 ) ) 
409-             && targets. all_values ( ) . contains ( & Pu128 ( 1 ) ) 
410-         { 
411-             // This is the really common case for `bool`, `Option`, etc. 
412-             // By using `trunc nuw` we communicate that other values are 
413-             // impossible without needing `switch` or `assume`s. 
414-             let  true_bb = targets. target_for_value ( 1 ) ; 
415-             let  false_bb = targets. target_for_value ( 0 ) ; 
416-             let  true_ll = helper. llbb_with_cleanup ( self ,  true_bb) ; 
417-             let  false_ll = helper. llbb_with_cleanup ( self ,  false_bb) ; 
418-             let  true_cold = self . cold_blocks [ true_bb] ; 
419-             let  false_cold = self . cold_blocks [ false_bb] ; 
420-             let  expect = ( true_cold != false_cold) . then_some ( !true_cold) ; 
421- 
422-             let  bool_ty = bx. tcx ( ) . types . bool ; 
423-             let  cond = if  switch_ty == bool_ty { 
424-                 discr_value
425-             }  else  { 
426-                 let  bool_llty = bx. immediate_backend_type ( bx. layout_of ( bool_ty) ) ; 
427-                 bx. unchecked_utrunc ( discr_value,  bool_llty) 
428-             } ; 
429-             bx. cond_br_with_expect ( cond,  true_ll,  false_ll,  expect) ; 
430406        }  else  if  self . cx . sess ( ) . opts . optimize  == OptLevel :: No 
431407            && target_iter. len ( )  == 2 
432408            && self . mir [ targets. otherwise ( ) ] . is_empty_unreachable ( ) 
@@ -451,6 +427,30 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
451427            let  llval = bx. const_uint_big ( switch_llty,  test_value1) ; 
452428            let  cmp = bx. icmp ( IntPredicate :: IntEQ ,  discr_value,  llval) ; 
453429            bx. cond_br ( cmp,  ll1,  ll2) ; 
430+         }  else  if  target_iter. len ( )  == 2 
431+             && self . mir [ targets. otherwise ( ) ] . is_empty_unreachable ( ) 
432+             && targets. all_values ( ) . contains ( & Pu128 ( 0 ) ) 
433+             && targets. all_values ( ) . contains ( & Pu128 ( 1 ) ) 
434+         { 
435+             // This is the really common case for `bool`, `Option`, etc. 
436+             // By using `trunc nuw` we communicate that other values are 
437+             // impossible without needing `switch` or `assume`s. 
438+             let  true_bb = targets. target_for_value ( 1 ) ; 
439+             let  false_bb = targets. target_for_value ( 0 ) ; 
440+             let  true_ll = helper. llbb_with_cleanup ( self ,  true_bb) ; 
441+             let  false_ll = helper. llbb_with_cleanup ( self ,  false_bb) ; 
442+             let  true_cold = self . cold_blocks [ true_bb] ; 
443+             let  false_cold = self . cold_blocks [ false_bb] ; 
444+             let  expect = ( true_cold != false_cold) . then_some ( !true_cold) ; 
445+ 
446+             let  bool_ty = bx. tcx ( ) . types . bool ; 
447+             let  cond = if  switch_ty == bool_ty { 
448+                 discr_value
449+             }  else  { 
450+                 let  bool_llty = bx. immediate_backend_type ( bx. layout_of ( bool_ty) ) ; 
451+                 bx. unchecked_utrunc ( discr_value,  bool_llty) 
452+             } ; 
453+             bx. cond_br_with_expect ( cond,  true_ll,  false_ll,  expect) ; 
454454        }  else  { 
455455            let  otherwise = targets. otherwise ( ) ; 
456456            let  otherwise_cold = self . cold_blocks [ otherwise] ; 
0 commit comments