From 002e1410913619fb44a6a8799d9099cfee0fc9a8 Mon Sep 17 00:00:00 2001 From: KevinA-cpu Date: Sat, 22 Aug 2026 20:37:09 +0700 Subject: [PATCH 1/3] Add regression test to ensure optimal compilation --- ...ro-zip-map-flatten-asm-perf-issue-81342.rs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs diff --git a/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs b/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs new file mode 100644 index 0000000000000..892033768f30d --- /dev/null +++ b/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs @@ -0,0 +1,26 @@ +// Regression tests for https://github.com/rust-lang/rust/issues/81342 +// foo and bar should generate the same, efficient assembly code +//@ compile-flags: -O +#![crate_type = "lib"] + +use std::num::NonZeroUsize; + +// CHECK-LABEL: @foo +// CHECK-COUNT-2: icmp eq i64 %{{.*}}, 0 +// CHECK: or i1 +// CHECK: select +// CHECK-NOT: icmp +#[unsafe(no_mangle)] +pub fn foo(x: Option, y: Option) -> Option { + if let (Some(x2), Some(y2)) = (x, y) { NonZeroUsize::new(x2.get() + y2.get()) } else { None } +} + +// CHECK-LABEL: @bar +// CHECK-COUNT-2: icmp eq i64 %{{.*}}, 0 +// CHECK: or i1 +// CHECK: select +// CHECK-NOT: icmp +#[unsafe(no_mangle)] +pub fn bar(x: Option, y: Option) -> Option { + x.zip(y).map(|(x2, y2)| NonZeroUsize::new(x2.get() + y2.get())).flatten() +} From d23062897ebaf5f5c6495fc44858d4e301590465 Mon Sep 17 00:00:00 2001 From: KevinA-cpu Date: Mon, 24 Aug 2026 19:37:36 +0700 Subject: [PATCH 2/3] fix: enfore 64bit for the test --- .../option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs b/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs index 892033768f30d..8a54f3bc87066 100644 --- a/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs +++ b/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs @@ -1,6 +1,7 @@ // Regression tests for https://github.com/rust-lang/rust/issues/81342 // foo and bar should generate the same, efficient assembly code //@ compile-flags: -O +//@ only-64bit #![crate_type = "lib"] use std::num::NonZeroUsize; From 4a96536ffa324d91bfea5ecec38eee8b480a5a3d Mon Sep 17 00:00:00 2001 From: KevinA-cpu Date: Thu, 27 Aug 2026 22:10:18 +0700 Subject: [PATCH 3/3] fix: apply suggestion from comment --- .../option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs b/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs index 8a54f3bc87066..840769b7d4a46 100644 --- a/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs +++ b/tests/codegen-llvm/issues/option-nonzero-zip-map-flatten-asm-perf-issue-81342.rs @@ -1,13 +1,12 @@ // Regression tests for https://github.com/rust-lang/rust/issues/81342 // foo and bar should generate the same, efficient assembly code //@ compile-flags: -O -//@ only-64bit #![crate_type = "lib"] use std::num::NonZeroUsize; // CHECK-LABEL: @foo -// CHECK-COUNT-2: icmp eq i64 %{{.*}}, 0 +// CHECK-COUNT-2: icmp eq i{{[0-9]+}} %{{.*}}, 0 // CHECK: or i1 // CHECK: select // CHECK-NOT: icmp @@ -17,7 +16,7 @@ pub fn foo(x: Option, y: Option) -> Option