diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/WebAssembly/simd-intrinsics.ll | 120 | ||||
| -rw-r--r-- | llvm/test/MC/WebAssembly/simd-encodings.s | 36 |
2 files changed, 156 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/simd-intrinsics.ll b/llvm/test/CodeGen/WebAssembly/simd-intrinsics.ll index 6a901ee4dad..d404e0bca54 100644 --- a/llvm/test/CodeGen/WebAssembly/simd-intrinsics.ll +++ b/llvm/test/CodeGen/WebAssembly/simd-intrinsics.ll @@ -65,6 +65,46 @@ define <16 x i8> @sub_sat_u_v16i8(<16 x i8> %x, <16 x i8> %y) { ret <16 x i8> %a } +; CHECK-LABEL: min_s_v16i8: +; SIMD128-NEXT: .functype min_s_v16i8 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i8x16.min_s $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <16 x i8> @llvm.wasm.min.signed.v16i8(<16 x i8>, <16 x i8>) +define <16 x i8> @min_s_v16i8(<16 x i8> %x, <16 x i8> %y) { + %a = call <16 x i8> @llvm.wasm.min.signed.v16i8(<16 x i8> %x, <16 x i8> %y) + ret <16 x i8> %a +} + +; CHECK-LABEL: min_u_v16i8: +; SIMD128-NEXT: .functype min_u_v16i8 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i8x16.min_u $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <16 x i8> @llvm.wasm.min.unsigned.v16i8(<16 x i8>, <16 x i8>) +define <16 x i8> @min_u_v16i8(<16 x i8> %x, <16 x i8> %y) { + %a = call <16 x i8> @llvm.wasm.min.unsigned.v16i8(<16 x i8> %x, <16 x i8> %y) + ret <16 x i8> %a +} + +; CHECK-LABEL: max_s_v16i8: +; SIMD128-NEXT: .functype max_s_v16i8 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i8x16.max_s $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <16 x i8> @llvm.wasm.max.signed.v16i8(<16 x i8>, <16 x i8>) +define <16 x i8> @max_s_v16i8(<16 x i8> %x, <16 x i8> %y) { + %a = call <16 x i8> @llvm.wasm.max.signed.v16i8(<16 x i8> %x, <16 x i8> %y) + ret <16 x i8> %a +} + +; CHECK-LABEL: max_u_v16i8: +; SIMD128-NEXT: .functype max_u_v16i8 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i8x16.max_u $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <16 x i8> @llvm.wasm.max.unsigned.v16i8(<16 x i8>, <16 x i8>) +define <16 x i8> @max_u_v16i8(<16 x i8> %x, <16 x i8> %y) { + %a = call <16 x i8> @llvm.wasm.max.unsigned.v16i8(<16 x i8> %x, <16 x i8> %y) + ret <16 x i8> %a +} + ; CHECK-LABEL: any_v16i8: ; SIMD128-NEXT: .functype any_v16i8 (v128) -> (i32){{$}} ; SIMD128-NEXT: i8x16.any_true $push[[R:[0-9]+]]=, $0{{$}} @@ -168,6 +208,46 @@ define <8 x i16> @sub_sat_u_v8i16(<8 x i16> %x, <8 x i16> %y) { ret <8 x i16> %a } +; CHECK-LABEL: min_s_v8i16: +; SIMD128-NEXT: .functype min_s_v8i16 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i16x8.min_s $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <8 x i16> @llvm.wasm.min.signed.v8i16(<8 x i16>, <8 x i16>) +define <8 x i16> @min_s_v8i16(<8 x i16> %x, <8 x i16> %y) { + %a = call <8 x i16> @llvm.wasm.min.signed.v8i16(<8 x i16> %x, <8 x i16> %y) + ret <8 x i16> %a +} + +; CHECK-LABEL: min_u_v8i16: +; SIMD128-NEXT: .functype min_u_v8i16 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i16x8.min_u $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <8 x i16> @llvm.wasm.min.unsigned.v8i16(<8 x i16>, <8 x i16>) +define <8 x i16> @min_u_v8i16(<8 x i16> %x, <8 x i16> %y) { + %a = call <8 x i16> @llvm.wasm.min.unsigned.v8i16(<8 x i16> %x, <8 x i16> %y) + ret <8 x i16> %a +} + +; CHECK-LABEL: max_s_v8i16: +; SIMD128-NEXT: .functype max_s_v8i16 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i16x8.max_s $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <8 x i16> @llvm.wasm.max.signed.v8i16(<8 x i16>, <8 x i16>) +define <8 x i16> @max_s_v8i16(<8 x i16> %x, <8 x i16> %y) { + %a = call <8 x i16> @llvm.wasm.max.signed.v8i16(<8 x i16> %x, <8 x i16> %y) + ret <8 x i16> %a +} + +; CHECK-LABEL: max_u_v8i16: +; SIMD128-NEXT: .functype max_u_v8i16 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i16x8.max_u $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <8 x i16> @llvm.wasm.max.unsigned.v8i16(<8 x i16>, <8 x i16>) +define <8 x i16> @max_u_v8i16(<8 x i16> %x, <8 x i16> %y) { + %a = call <8 x i16> @llvm.wasm.max.unsigned.v8i16(<8 x i16> %x, <8 x i16> %y) + ret <8 x i16> %a +} + ; CHECK-LABEL: any_v8i16: ; SIMD128-NEXT: .functype any_v8i16 (v128) -> (i32){{$}} ; SIMD128-NEXT: i16x8.any_true $push[[R:[0-9]+]]=, $0{{$}} @@ -267,6 +347,46 @@ define <8 x i16> @widen_high_unsigned_v8i16(<16 x i8> %v) { ; ============================================================================== ; 4 x i32 ; ============================================================================== +; CHECK-LABEL: min_s_v4i32: +; SIMD128-NEXT: .functype min_s_v4i32 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i32x4.min_s $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <4 x i32> @llvm.wasm.min.signed.v4i32(<4 x i32>, <4 x i32>) +define <4 x i32> @min_s_v4i32(<4 x i32> %x, <4 x i32> %y) { + %a = call <4 x i32> @llvm.wasm.min.signed.v4i32(<4 x i32> %x, <4 x i32> %y) + ret <4 x i32> %a +} + +; CHECK-LABEL: min_u_v4i32: +; SIMD128-NEXT: .functype min_u_v4i32 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i32x4.min_u $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <4 x i32> @llvm.wasm.min.unsigned.v4i32(<4 x i32>, <4 x i32>) +define <4 x i32> @min_u_v4i32(<4 x i32> %x, <4 x i32> %y) { + %a = call <4 x i32> @llvm.wasm.min.unsigned.v4i32(<4 x i32> %x, <4 x i32> %y) + ret <4 x i32> %a +} + +; CHECK-LABEL: max_s_v4i32: +; SIMD128-NEXT: .functype max_s_v4i32 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i32x4.max_s $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <4 x i32> @llvm.wasm.max.signed.v4i32(<4 x i32>, <4 x i32>) +define <4 x i32> @max_s_v4i32(<4 x i32> %x, <4 x i32> %y) { + %a = call <4 x i32> @llvm.wasm.max.signed.v4i32(<4 x i32> %x, <4 x i32> %y) + ret <4 x i32> %a +} + +; CHECK-LABEL: max_u_v4i32: +; SIMD128-NEXT: .functype max_u_v4i32 (v128, v128) -> (v128){{$}} +; SIMD128-NEXT: i32x4.max_u $push[[R:[0-9]+]]=, $0, $1{{$}} +; SIMD128-NEXT: return $pop[[R]]{{$}} +declare <4 x i32> @llvm.wasm.max.unsigned.v4i32(<4 x i32>, <4 x i32>) +define <4 x i32> @max_u_v4i32(<4 x i32> %x, <4 x i32> %y) { + %a = call <4 x i32> @llvm.wasm.max.unsigned.v4i32(<4 x i32> %x, <4 x i32> %y) + ret <4 x i32> %a +} + ; CHECK-LABEL: any_v4i32: ; SIMD128-NEXT: .functype any_v4i32 (v128) -> (i32){{$}} ; SIMD128-NEXT: i32x4.any_true $push[[R:[0-9]+]]=, $0{{$}} diff --git a/llvm/test/MC/WebAssembly/simd-encodings.s b/llvm/test/MC/WebAssembly/simd-encodings.s index f321094b53d..adddcf5e582 100644 --- a/llvm/test/MC/WebAssembly/simd-encodings.s +++ b/llvm/test/MC/WebAssembly/simd-encodings.s @@ -283,6 +283,18 @@ main: # CHECK: i8x16.mul # encoding: [0xfd,0x5d] i8x16.mul + # CHECK: i8x16.min_s # encoding: [0xfd,0x5e] + i8x16.min_s + + # CHECK: i8x16.min_u # encoding: [0xfd,0x5f] + i8x16.min_u + + # CHECK: i8x16.max_s # encoding: [0xfd,0x60] + i8x16.max_s + + # CHECK: i8x16.max_u # encoding: [0xfd,0x61] + i8x16.max_u + # CHECK: i16x8.neg # encoding: [0xfd,0x62] i16x8.neg @@ -322,6 +334,18 @@ main: # CHECK: i16x8.mul # encoding: [0xfd,0x6e] i16x8.mul + # CHECK: i16x8.min_s # encoding: [0xfd,0x6f] + i16x8.min_s + + # CHECK: i16x8.min_u # encoding: [0xfd,0x70] + i16x8.min_u + + # CHECK: i16x8.max_s # encoding: [0xfd,0x71] + i16x8.max_s + + # CHECK: i16x8.max_u # encoding: [0xfd,0x72] + i16x8.max_u + # CHECK: i32x4.neg # encoding: [0xfd,0x73] i32x4.neg @@ -349,6 +373,18 @@ main: # CHECK: i32x4.mul # encoding: [0xfd,0x7f] i32x4.mul + # CHECK: i32x4.min_s # encoding: [0xfd,0x80,0x01] + i32x4.min_s + + # CHECK: i32x4.min_u # encoding: [0xfd,0x81,0x01] + i32x4.min_u + + # CHECK: i32x4.max_s # encoding: [0xfd,0x82,0x01] + i32x4.max_s + + # CHECK: i32x4.max_u # encoding: [0xfd,0x83,0x01] + i32x4.max_u + # CHECK: i64x2.neg # encoding: [0xfd,0x84,0x01] i64x2.neg |

