about summary refs log tree commit diff
path: root/tests/codegen-llvm/issues/issue-126585.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/codegen-llvm/issues/issue-126585.rs')
-rw-r--r--tests/codegen-llvm/issues/issue-126585.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/codegen-llvm/issues/issue-126585.rs b/tests/codegen-llvm/issues/issue-126585.rs
new file mode 100644
index 00000000000..466dab64cdc
--- /dev/null
+++ b/tests/codegen-llvm/issues/issue-126585.rs
@@ -0,0 +1,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 }),
+    }
+}