[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