25 lines
688 B
Rust
25 lines
688 B
Rust
|
//@ compile-flags: -Copt-level=s
|
||
|
//@ min-llvm-version: 19
|
||
|
//@ 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 }),
|
||
|
}
|
||
|
}
|