diff options
| author | bors <bors@rust-lang.org> | 2024-02-25 01:27:44 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-02-25 01:27:44 +0000 |
| commit | 89d8e3116ccb7f55760825b731de4f4e0fd76770 (patch) | |
| tree | e1434d2765fb14a8d1066fabb2b9f780a3d7320a /tests/codegen | |
| parent | 2ae1bb671183a072b54ed8ed39abfcd72990a3e7 (diff) | |
| parent | 7159aed51e7ef4d8459a10e449bf8e9cc09c9b98 (diff) | |
| download | rust-89d8e3116ccb7f55760825b731de4f4e0fd76770.tar.gz rust-89d8e3116ccb7f55760825b731de4f4e0fd76770.zip | |
Auto merge of #120650 - clubby789:switchint-const, r=saethlin
Use `br` instead of a conditional when switching on a constant boolean r? `@ghost`
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/constant-branch.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/codegen/constant-branch.rs b/tests/codegen/constant-branch.rs new file mode 100644 index 00000000000..3328b1eb4a8 --- /dev/null +++ b/tests/codegen/constant-branch.rs @@ -0,0 +1,67 @@ +//@ 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: br label %{{.+}} + _ = if true { + 0 + } else { + 1 + }; + + // CHECK: br label %{{.+}} + _ = if false { + 0 + } else { + 1 + }; +} + +// CHECK-LABEL: @if_constant_int_eq +#[no_mangle] +pub fn if_constant_int_eq() { + let val = 0; + // CHECK: br label %{{.+}} + _ = 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: br label %{{.+}} + _ = match 1 { + 1 => 2, + 2 => 3, + _ => 4 + }; + + // CHECK: br label %{{.+}} + _ = match 1 { + 2 => 3, + _ => 4 + }; + + // CHECK: br label %[[MINUS1:.+]] + _ = match -1 { + // CHECK: [[MINUS1]]: + // CHECK: store i32 1 + -1 => 1, + _ => 0, + } +} |
