[llvm] [WASM] Fold bitselect with splat zero (PR #147305)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 8 04:17:08 PDT 2025


================
@@ -6,15 +6,14 @@ define void @bitselect_first_zero(ptr %output, ptr  %input) {
 ; CHECK-LABEL: bitselect_first_zero:
 ; CHECK:         .functype bitselect_first_zero (i32, i32) -> ()
 ; CHECK-NEXT:  # %bb.0: # %start
-; CHECK-NEXT:    v128.const $push7=, 0, 0, 0, 0
-; CHECK-NEXT:    local.tee $push6=, $3=, $pop7
-; CHECK-NEXT:    v128.load $push5=, 0($1)
-; CHECK-NEXT:    local.tee $push4=, $2=, $pop5
+; CHECK-NEXT:    v128.load $push6=, 0($1)
+; CHECK-NEXT:    local.tee $push5=, $2=, $pop6
 ; CHECK-NEXT:    v128.const $push0=, 2139095040, 2139095040, 2139095040, 2139095040
 ; CHECK-NEXT:    v128.and $push1=, $2, $pop0
-; CHECK-NEXT:    i32x4.eq $push2=, $3, $pop1
-; CHECK-NEXT:    v128.bitselect $push3=, $pop6, $pop4, $pop2
-; CHECK-NEXT:    v128.store 0($0), $pop3
+; CHECK-NEXT:    v128.const $push2=, 0, 0, 0, 0
+; CHECK-NEXT:    i32x4.ne $push3=, $pop1, $pop2
+; CHECK-NEXT:    v128.and $push4=, $pop5, $pop3
+; CHECK-NEXT:    v128.store 0($0), $pop4
 ; CHECK-NEXT:    return
 start:
   %input.val = load <4 x i32>, ptr %input, align 16
----------------
lukel97 wrote:

No need for the load and stores, you can just pass it in as an argument and return it

https://github.com/llvm/llvm-project/pull/147305


More information about the llvm-commits mailing list