about summary refs log tree commit diff
path: root/tests/codegen-llvm/issues/issue-126585.rs
blob: 466dab64cdc1a61233423b9f4b7ef50c7cfec1e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//@ compile-flags: -Copt-level=s
//@ only-x86_64

// Test for #126585.
// Ensure that this IR doesn't have extra undef phi input, which also guarantees that this asm
// doesn't have subsequent labels and unnecessary `jmp` instructions.

#![crate_type = "lib"]

#[no_mangle]
fn checked_div_round(a: u64, b: u64) -> Option<u64> {
    // CHECK-LABEL: @checked_div_round
    // CHECK: phi
    // CHECK-NOT: undef
    // CHECK: phi
    // CHECK-NOT: undef
    match b {
        0 => None,
        1 => Some(a),
        // `a / b` is computable and `(a % b) * 2` can not overflow since `b >= 2`.
        b => Some(a / b + if (a % b) * 2 >= b { 1 } else { 0 }),
    }
}