| //@ 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, | |
| } | |
| } |