| //@ compile-flags: -Zmir-opt-level=0 -C no-prepopulate-passes -Copt-level=0 |
| // make sure that branching on a constant does not emit a conditional |
| // branch or a switch |
| |
| #![crate_type = "lib"] |
| |
| // CHECK-LABEL: @if_bool |
| #[no_mangle] |
| pub fn if_bool() { |
| // CHECK-NOT: br i1 |
| // CHECK-NOT: switch |
| _ = if true { 0 } else { 1 }; |
| |
| _ = if false { 0 } else { 1 }; |
| } |
| |
| // CHECK-LABEL: @if_constant_int_eq |
| #[no_mangle] |
| pub fn if_constant_int_eq() { |
| // CHECK-NOT: br i1 |
| // CHECK-NOT: switch |
| let val = 0; |
| _ = if val == 0 { 0 } else { 1 }; |
| |
| // CHECK: br label %{{.+}} |
| _ = if val == 1 { 0 } else { 1 }; |
| } |
| |
| // CHECK-LABEL: @if_constant_match |
| #[no_mangle] |
| pub fn if_constant_match() { |
| // CHECK-NOT: br i1 |
| // CHECK-NOT: switch |
| _ = match 1 { |
| 1 => 2, |
| 2 => 3, |
| _ => 4, |
| }; |
| |
| _ = match 1 { |
| 2 => 3, |
| _ => 4, |
| }; |
| |
| _ = match -1 { |
| -1 => 1, |
| _ => 0, |
| } |
| } |