diff --git a/tests/codegen-llvm/issues/signed-nonzero-matches.rs b/tests/codegen-llvm/issues/signed-nonzero-matches.rs new file mode 100644 index 0000000000000..b253629091085 --- /dev/null +++ b/tests/codegen-llvm/issues/signed-nonzero-matches.rs @@ -0,0 +1,24 @@ +// Matching a signed non-zero value against -1 or 1 should not require +// branching code. + +//@ compile-flags: -Copt-level=3 + +#![crate_type = "lib"] + +use std::num::NonZeroI32; + +// CHECK-LABEL: @signed_nonzero_matches +#[no_mangle] +pub fn signed_nonzero_matches(n: NonZeroI32) -> bool { + // CHECK-NOT: br i1 + // CHECK: ret i1 + matches!(n.get(), -1 | 1) +} + +// CHECK-LABEL: @signed_nonzero_eq +#[no_mangle] +pub fn signed_nonzero_eq(n: NonZeroI32) -> bool { + // CHECK-NOT: br i1 + // CHECK: ret i1 + n.get() == -1 || n.get() == 1 +}