Skip to content

Commit a787e09

Browse files
committed
[WebAssembly] Prototype i64x2.bitmask
As proposed in WebAssembly/simd#368. Differential Revision: https://reviews.llvm.org/D90514
1 parent 882fa24 commit a787e09

File tree

6 files changed

+23
-1
lines changed

6 files changed

+23
-1
lines changed

clang/include/clang/Basic/BuiltinsWebAssembly.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ TARGET_BUILTIN(__builtin_wasm_all_true_i64x2, "iV2LLi", "nc", "unimplemented-sim
154154
TARGET_BUILTIN(__builtin_wasm_bitmask_i8x16, "iV16Sc", "nc", "simd128")
155155
TARGET_BUILTIN(__builtin_wasm_bitmask_i16x8, "iV8s", "nc", "simd128")
156156
TARGET_BUILTIN(__builtin_wasm_bitmask_i32x4, "iV4i", "nc", "simd128")
157+
TARGET_BUILTIN(__builtin_wasm_bitmask_i64x2, "iV2LLi", "nc", "simd128")
157158

158159
TARGET_BUILTIN(__builtin_wasm_abs_f32x4, "V4fV4f", "nc", "simd128")
159160
TARGET_BUILTIN(__builtin_wasm_abs_f64x2, "V2dV2d", "nc", "simd128")

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16734,7 +16734,8 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1673416734
}
1673516735
case WebAssembly::BI__builtin_wasm_bitmask_i8x16:
1673616736
case WebAssembly::BI__builtin_wasm_bitmask_i16x8:
16737-
case WebAssembly::BI__builtin_wasm_bitmask_i32x4: {
16737+
case WebAssembly::BI__builtin_wasm_bitmask_i32x4:
16738+
case WebAssembly::BI__builtin_wasm_bitmask_i64x2: {
1673816739
Value *Vec = EmitScalarExpr(E->getArg(0));
1673916740
Function *Callee =
1674016741
CGM.getIntrinsic(Intrinsic::wasm_bitmask, Vec->getType());

clang/test/CodeGen/builtins-wasm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,12 @@ int bitmask_i32x4(i32x4 x) {
728728
// WEBASSEMBLY: ret
729729
}
730730

731+
int bitmask_i64x2(i64x2 x) {
732+
return __builtin_wasm_bitmask_i64x2(x);
733+
// WEBASSEMBLY: call i32 @llvm.wasm.bitmask.v2i64(<2 x i64> %x)
734+
// WEBASSEMBLY: ret
735+
}
736+
731737
f32x4 abs_f32x4(f32x4 x) {
732738
return __builtin_wasm_abs_f32x4(x);
733739
// WEBASSEMBLY: call <4 x float> @llvm.fabs.v4f32(<4 x float> %x)

llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,7 @@ multiclass SIMDBitmask<ValueType vec_t, string vec, bits<32> simdop> {
848848
defm BITMASK : SIMDBitmask<v16i8, "i8x16", 100>;
849849
defm BITMASK : SIMDBitmask<v8i16, "i16x8", 132>;
850850
defm BITMASK : SIMDBitmask<v4i32, "i32x4", 164>;
851+
defm BITMASK : SIMDBitmask<v2i64, "i64x2", 196>;
851852

852853
//===----------------------------------------------------------------------===//
853854
// Bit shifts

llvm/test/CodeGen/WebAssembly/simd-intrinsics.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,16 @@ define i32 @all_v2i64(<2 x i64> %x) {
646646
ret i32 %a
647647
}
648648

649+
; CHECK-LABEL: bitmask_v2i64:
650+
; SIMD128-NEXT: .functype bitmask_v2i64 (v128) -> (i32){{$}}
651+
; SIMD128-NEXT: i64x2.bitmask $push[[R:[0-9]+]]=, $0{{$}}
652+
; SIMD128-NEXT: return $pop[[R]]{{$}}
653+
declare i32 @llvm.wasm.bitmask.v2i64(<2 x i64>)
654+
define i32 @bitmask_v2i64(<2 x i64> %x) {
655+
%a = call i32 @llvm.wasm.bitmask.v2i64(<2 x i64> %x)
656+
ret i32 %a
657+
}
658+
649659
; CHECK-LABEL: bitselect_v2i64:
650660
; SIMD128-NEXT: .functype bitselect_v2i64 (v128, v128, v128) -> (v128){{$}}
651661
; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}

llvm/test/MC/WebAssembly/simd-encodings.s

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,9 @@ main:
523523
# CHECK: i64x2.all_true # encoding: [0xfd,0xc3,0x01]
524524
i64x2.all_true
525525

526+
# CHECK: i64x2.bitmask # encoding: [0xfd,0xc4,0x01]
527+
i64x2.bitmask
528+
526529
# CHECK: i64x2.widen_low_i32x4_s # encoding: [0xfd,0xc7,0x01]
527530
i64x2.widen_low_i32x4_s
528531

0 commit comments

Comments
 (0)