diff options
| author | clubby789 <jamie@hill-daniel.co.uk> | 2024-02-05 16:15:47 +0000 |
|---|---|---|
| committer | clubby789 <jamie@hill-daniel.co.uk> | 2024-02-23 10:52:55 +0000 |
| commit | 7159aed51e7ef4d8459a10e449bf8e9cc09c9b98 (patch) | |
| tree | a706c7710ac7008fdc08184cd923e419ac4a3fad /tests/codegen | |
| parent | 397937d812852f9bbeb671005cb399dbcb357cde (diff) | |
| download | rust-7159aed51e7ef4d8459a10e449bf8e9cc09c9b98.tar.gz rust-7159aed51e7ef4d8459a10e449bf8e9cc09c9b98.zip | |
Use `br` instead of conditional when branching on constant
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, + } +} |
