Skip to content

Commit 502f540

Browse files
committed
[WebAssembly] Finalize wasm_simd128.h intrinsics
Adds new intrinsics for instructions that are in the final SIMD spec but did not previously have intrinsics. Also updates the names of existing intrinsics to reflect the final names of the underlying instructions in the spec. Keeps the old names as deprecated functions to ease the transition to the new names. Differential Revision: https://reviews.llvm.org/D101112
1 parent 2f6405e commit 502f540

File tree

5 files changed

+597
-124
lines changed

5 files changed

+597
-124
lines changed

clang/include/clang/Basic/BuiltinsWebAssembly.def

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ TARGET_BUILTIN(__builtin_wasm_trunc_saturate_s_i64_f64, "LLid", "nc", "nontrappi
6666
TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i64_f64, "LLid", "nc", "nontrapping-fptoint")
6767

6868
// SIMD builtins
69-
TARGET_BUILTIN(__builtin_wasm_swizzle_v8x16, "V16ScV16ScV16Sc", "nc", "simd128")
69+
TARGET_BUILTIN(__builtin_wasm_swizzle_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
7070

7171
TARGET_BUILTIN(__builtin_wasm_extract_lane_s_i8x16, "iV16ScIi", "nc", "simd128")
7272
TARGET_BUILTIN(__builtin_wasm_extract_lane_u_i8x16, "iV16UcIUi", "nc", "simd128")
@@ -97,6 +97,7 @@ TARGET_BUILTIN(__builtin_wasm_sub_sat_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
9797
TARGET_BUILTIN(__builtin_wasm_abs_i8x16, "V16ScV16Sc", "nc", "simd128")
9898
TARGET_BUILTIN(__builtin_wasm_abs_i16x8, "V8sV8s", "nc", "simd128")
9999
TARGET_BUILTIN(__builtin_wasm_abs_i32x4, "V4iV4i", "nc", "simd128")
100+
TARGET_BUILTIN(__builtin_wasm_abs_i64x2, "V2LLiV2LLi", "nc", "simd128")
100101

101102
TARGET_BUILTIN(__builtin_wasm_min_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
102103
TARGET_BUILTIN(__builtin_wasm_min_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
@@ -141,12 +142,9 @@ TARGET_BUILTIN(__builtin_wasm_extadd_pairwise_i16x8_u_i32x4, "V4UiV8Us", "nc", "
141142

142143
TARGET_BUILTIN(__builtin_wasm_bitselect, "V4iV4iV4iV4i", "nc", "simd128")
143144

144-
TARGET_BUILTIN(__builtin_wasm_shuffle_v8x16, "V16ScV16ScV16ScIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi", "nc", "simd128")
145+
TARGET_BUILTIN(__builtin_wasm_shuffle_i8x16, "V16ScV16ScV16ScIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi", "nc", "simd128")
145146

146-
TARGET_BUILTIN(__builtin_wasm_any_true_i8x16, "iV16Sc", "nc", "simd128")
147-
TARGET_BUILTIN(__builtin_wasm_any_true_i16x8, "iV8s", "nc", "simd128")
148-
TARGET_BUILTIN(__builtin_wasm_any_true_i32x4, "iV4i", "nc", "simd128")
149-
TARGET_BUILTIN(__builtin_wasm_any_true_i64x2, "iV2LLi", "nc", "simd128")
147+
TARGET_BUILTIN(__builtin_wasm_any_true_v128, "iV16Sc", "nc", "simd128")
150148
TARGET_BUILTIN(__builtin_wasm_all_true_i8x16, "iV16Sc", "nc", "simd128")
151149
TARGET_BUILTIN(__builtin_wasm_all_true_i16x8, "iV8s", "nc", "simd128")
152150
TARGET_BUILTIN(__builtin_wasm_all_true_i32x4, "iV4i", "nc", "simd128")

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17157,7 +17157,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1715717157
Function *Callee = CGM.getIntrinsic(IntNo, ConvertType(E->getType()));
1715817158
return Builder.CreateCall(Callee, Value);
1715917159
}
17160-
case WebAssembly::BI__builtin_wasm_swizzle_v8x16: {
17160+
case WebAssembly::BI__builtin_wasm_swizzle_i8x16: {
1716117161
Value *Src = EmitScalarExpr(E->getArg(0));
1716217162
Value *Indices = EmitScalarExpr(E->getArg(1));
1716317163
Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_swizzle);
@@ -17256,7 +17256,8 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1725617256
}
1725717257
case WebAssembly::BI__builtin_wasm_abs_i8x16:
1725817258
case WebAssembly::BI__builtin_wasm_abs_i16x8:
17259-
case WebAssembly::BI__builtin_wasm_abs_i32x4: {
17259+
case WebAssembly::BI__builtin_wasm_abs_i32x4:
17260+
case WebAssembly::BI__builtin_wasm_abs_i64x2: {
1726017261
Value *Vec = EmitScalarExpr(E->getArg(0));
1726117262
Value *Neg = Builder.CreateNeg(Vec, "neg");
1726217263
Constant *Zero = llvm::Constant::getNullValue(Vec->getType());
@@ -17402,20 +17403,14 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1740217403
Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_popcnt);
1740317404
return Builder.CreateCall(Callee, {Vec});
1740417405
}
17405-
case WebAssembly::BI__builtin_wasm_any_true_i8x16:
17406-
case WebAssembly::BI__builtin_wasm_any_true_i16x8:
17407-
case WebAssembly::BI__builtin_wasm_any_true_i32x4:
17408-
case WebAssembly::BI__builtin_wasm_any_true_i64x2:
17406+
case WebAssembly::BI__builtin_wasm_any_true_v128:
1740917407
case WebAssembly::BI__builtin_wasm_all_true_i8x16:
1741017408
case WebAssembly::BI__builtin_wasm_all_true_i16x8:
1741117409
case WebAssembly::BI__builtin_wasm_all_true_i32x4:
1741217410
case WebAssembly::BI__builtin_wasm_all_true_i64x2: {
1741317411
unsigned IntNo;
1741417412
switch (BuiltinID) {
17415-
case WebAssembly::BI__builtin_wasm_any_true_i8x16:
17416-
case WebAssembly::BI__builtin_wasm_any_true_i16x8:
17417-
case WebAssembly::BI__builtin_wasm_any_true_i32x4:
17418-
case WebAssembly::BI__builtin_wasm_any_true_i64x2:
17413+
case WebAssembly::BI__builtin_wasm_any_true_v128:
1741917414
IntNo = Intrinsic::wasm_anytrue;
1742017415
break;
1742117416
case WebAssembly::BI__builtin_wasm_all_true_i8x16:
@@ -17566,7 +17561,7 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1756617561
Function *Callee = CGM.getIntrinsic(IntNo);
1756717562
return Builder.CreateCall(Callee, {Ptr, Vec, LaneIdx});
1756817563
}
17569-
case WebAssembly::BI__builtin_wasm_shuffle_v8x16: {
17564+
case WebAssembly::BI__builtin_wasm_shuffle_i8x16: {
1757017565
Value *Ops[18];
1757117566
size_t OpIdx = 0;
1757217567
Ops[OpIdx++] = EmitScalarExpr(E->getArg(0));

0 commit comments

Comments
 (0)