[llvm] [WebAssembly] Add support for avgr_u in loops (PR #153252)

Jasmine Tang via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 20 14:52:42 PDT 2025


================

----------------
badumbatish wrote:

It doesn't seem to generate a avgr_u

```
  %a = add <16 x i16> %x, %y
  %b = add <16 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1,
                          i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %c = lshr <16 x i16> %b, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1,
                           i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  ret <16 x i16> %c
```
seems to generate this
```
; SIMD128-LABEL: avgr_u_v16i16:
; SIMD128:         .functype avgr_u_v16i16 (i32, v128, v128, v128, v128) -> ()
; SIMD128-NEXT:  # %bb.0:
; SIMD128-NEXT:    i16x8.add $push0=, $2, $4
; SIMD128-NEXT:    v128.const $push9=, 1, 1, 1, 1, 1, 1, 1, 1
; SIMD128-NEXT:    local.tee $push8=, $4=, $pop9
; SIMD128-NEXT:    i16x8.add $push1=, $pop0, $pop8
; SIMD128-NEXT:    i32.const $push2=, 1
; SIMD128-NEXT:    i16x8.shr_u $push3=, $pop1, $pop2
; SIMD128-NEXT:    v128.store 16($0), $pop3
; SIMD128-NEXT:    i16x8.add $push4=, $1, $3
; SIMD128-NEXT:    i16x8.add $push5=, $pop4, $4
; SIMD128-NEXT:    i32.const $push7=, 1
; SIMD128-NEXT:    i16x8.shr_u $push6=, $pop5, $pop7
; SIMD128-NEXT:    v128.store 0($0), $pop6
; SIMD128-NEXT:    return
;
```


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


More information about the llvm-commits mailing list