Skip to content

Commit c3a26cb

Browse files
tlivelynikic
authored andcommitted
[WebAssembly] Finalize SIMD names and opcodes
Updates the names (e.g. widen => extend, saturate => sat) and opcodes of all SIMD instructions to match the finalized SIMD spec. Deliberately does not change the public interface in wasm_simd128.h yet; that will require more care. Depends on D98466. Differential Revision: https://reviews.llvm.org/D98676
1 parent a3627f1 commit c3a26cb

File tree

11 files changed

+489
-458
lines changed

11 files changed

+489
-458
lines changed

clang/include/clang/Basic/BuiltinsWebAssembly.def

+15-15
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ TARGET_BUILTIN(__builtin_wasm_replace_lane_i64x2, "V2LLiV2LLiIiLLi", "nc", "simd
8484
TARGET_BUILTIN(__builtin_wasm_replace_lane_f32x4, "V4fV4fIif", "nc", "simd128")
8585
TARGET_BUILTIN(__builtin_wasm_replace_lane_f64x2, "V2dV2dIid", "nc", "simd128")
8686

87-
TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
88-
TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
89-
TARGET_BUILTIN(__builtin_wasm_add_saturate_s_i16x8, "V8sV8sV8s", "nc", "simd128")
90-
TARGET_BUILTIN(__builtin_wasm_add_saturate_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
87+
TARGET_BUILTIN(__builtin_wasm_add_sat_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
88+
TARGET_BUILTIN(__builtin_wasm_add_sat_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
89+
TARGET_BUILTIN(__builtin_wasm_add_sat_s_i16x8, "V8sV8sV8s", "nc", "simd128")
90+
TARGET_BUILTIN(__builtin_wasm_add_sat_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
9191

92-
TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
93-
TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
94-
TARGET_BUILTIN(__builtin_wasm_sub_saturate_s_i16x8, "V8sV8sV8s", "nc", "simd128")
95-
TARGET_BUILTIN(__builtin_wasm_sub_saturate_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
92+
TARGET_BUILTIN(__builtin_wasm_sub_sat_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
93+
TARGET_BUILTIN(__builtin_wasm_sub_sat_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
94+
TARGET_BUILTIN(__builtin_wasm_sub_sat_s_i16x8, "V8sV8sV8s", "nc", "simd128")
95+
TARGET_BUILTIN(__builtin_wasm_sub_sat_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
9696

9797
TARGET_BUILTIN(__builtin_wasm_abs_i8x16, "V16ScV16Sc", "nc", "simd128")
9898
TARGET_BUILTIN(__builtin_wasm_abs_i16x8, "V8sV8s", "nc", "simd128")
@@ -116,7 +116,7 @@ TARGET_BUILTIN(__builtin_wasm_avgr_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
116116

117117
TARGET_BUILTIN(__builtin_wasm_popcnt_i8x16, "V16ScV16Sc", "nc", "simd128")
118118

119-
TARGET_BUILTIN(__builtin_wasm_q15mulr_saturate_s_i16x8, "V8sV8sV8s", "nc", "simd128")
119+
TARGET_BUILTIN(__builtin_wasm_q15mulr_sat_s_i16x8, "V8sV8sV8s", "nc", "simd128")
120120

121121
TARGET_BUILTIN(__builtin_wasm_extmul_low_i8x16_s_i16x8, "V8sV16ScV16Sc", "nc", "simd128")
122122
TARGET_BUILTIN(__builtin_wasm_extmul_high_i8x16_s_i16x8, "V8sV16ScV16Sc", "nc", "simd128")
@@ -191,15 +191,15 @@ TARGET_BUILTIN(__builtin_wasm_narrow_u_i8x16_i16x8, "V16UcV8UsV8Us", "nc", "simd
191191
TARGET_BUILTIN(__builtin_wasm_narrow_s_i16x8_i32x4, "V8sV4iV4i", "nc", "simd128")
192192
TARGET_BUILTIN(__builtin_wasm_narrow_u_i16x8_i32x4, "V8UsV4UiV4Ui", "nc", "simd128")
193193

194-
TARGET_BUILTIN(__builtin_wasm_widen_low_s_i32x4_i64x2, "V2LLiV4i", "nc", "simd128")
195-
TARGET_BUILTIN(__builtin_wasm_widen_high_s_i32x4_i64x2, "V2LLiV4i", "nc", "simd128")
196-
TARGET_BUILTIN(__builtin_wasm_widen_low_u_i32x4_i64x2, "V2LLUiV4Ui", "nc", "simd128")
197-
TARGET_BUILTIN(__builtin_wasm_widen_high_u_i32x4_i64x2, "V2LLUiV4Ui", "nc", "simd128")
194+
TARGET_BUILTIN(__builtin_wasm_extend_low_s_i32x4_i64x2, "V2LLiV4i", "nc", "simd128")
195+
TARGET_BUILTIN(__builtin_wasm_extend_high_s_i32x4_i64x2, "V2LLiV4i", "nc", "simd128")
196+
TARGET_BUILTIN(__builtin_wasm_extend_low_u_i32x4_i64x2, "V2LLUiV4Ui", "nc", "simd128")
197+
TARGET_BUILTIN(__builtin_wasm_extend_high_u_i32x4_i64x2, "V2LLUiV4Ui", "nc", "simd128")
198198

199199
TARGET_BUILTIN(__builtin_wasm_convert_low_s_i32x4_f64x2, "V2dV4i", "nc", "simd128")
200200
TARGET_BUILTIN(__builtin_wasm_convert_low_u_i32x4_f64x2, "V2dV4Ui", "nc", "simd128")
201-
TARGET_BUILTIN(__builtin_wasm_trunc_saturate_zero_s_f64x2_i32x4, "V4iV2d", "nc", "simd128")
202-
TARGET_BUILTIN(__builtin_wasm_trunc_saturate_zero_u_f64x2_i32x4, "V4UiV2d", "nc", "simd128")
201+
TARGET_BUILTIN(__builtin_wasm_trunc_sat_zero_s_f64x2_i32x4, "V4iV2d", "nc", "simd128")
202+
TARGET_BUILTIN(__builtin_wasm_trunc_sat_zero_u_f64x2_i32x4, "V4UiV2d", "nc", "simd128")
203203
TARGET_BUILTIN(__builtin_wasm_demote_zero_f64x2_f32x4, "V4fV2d", "nc", "simd128")
204204
TARGET_BUILTIN(__builtin_wasm_promote_low_f32x4_f64x2, "V2dV4f", "nc", "simd128")
205205

clang/lib/CodeGen/CGBuiltin.cpp

+38-39
Original file line numberDiff line numberDiff line change
@@ -16903,31 +16903,31 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1690316903
llvm_unreachable("unexpected builtin ID");
1690416904
}
1690516905
}
16906-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i8x16:
16907-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i8x16:
16908-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i16x8:
16909-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i16x8:
16910-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i8x16:
16911-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i8x16:
16912-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i16x8:
16913-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i16x8: {
16906+
case WebAssembly::BI__builtin_wasm_add_sat_s_i8x16:
16907+
case WebAssembly::BI__builtin_wasm_add_sat_u_i8x16:
16908+
case WebAssembly::BI__builtin_wasm_add_sat_s_i16x8:
16909+
case WebAssembly::BI__builtin_wasm_add_sat_u_i16x8:
16910+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i8x16:
16911+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i8x16:
16912+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i16x8:
16913+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i16x8: {
1691416914
unsigned IntNo;
1691516915
switch (BuiltinID) {
16916-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i8x16:
16917-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i16x8:
16916+
case WebAssembly::BI__builtin_wasm_add_sat_s_i8x16:
16917+
case WebAssembly::BI__builtin_wasm_add_sat_s_i16x8:
1691816918
IntNo = Intrinsic::sadd_sat;
1691916919
break;
16920-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i8x16:
16921-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i16x8:
16920+
case WebAssembly::BI__builtin_wasm_add_sat_u_i8x16:
16921+
case WebAssembly::BI__builtin_wasm_add_sat_u_i16x8:
1692216922
IntNo = Intrinsic::uadd_sat;
1692316923
break;
16924-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i8x16:
16925-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i16x8:
16926-
IntNo = Intrinsic::wasm_sub_saturate_signed;
16924+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i8x16:
16925+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i16x8:
16926+
IntNo = Intrinsic::wasm_sub_sat_signed;
1692716927
break;
16928-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i8x16:
16929-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i16x8:
16930-
IntNo = Intrinsic::wasm_sub_saturate_unsigned;
16928+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i8x16:
16929+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i16x8:
16930+
IntNo = Intrinsic::wasm_sub_sat_unsigned;
1693116931
break;
1693216932
default:
1693316933
llvm_unreachable("unexpected builtin ID");
@@ -16995,11 +16995,10 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1699516995
ConvertType(E->getType()));
1699616996
return Builder.CreateCall(Callee, {LHS, RHS});
1699716997
}
16998-
case WebAssembly::BI__builtin_wasm_q15mulr_saturate_s_i16x8: {
16998+
case WebAssembly::BI__builtin_wasm_q15mulr_sat_s_i16x8: {
1699916999
Value *LHS = EmitScalarExpr(E->getArg(0));
1700017000
Value *RHS = EmitScalarExpr(E->getArg(1));
17001-
Function *Callee =
17002-
CGM.getIntrinsic(Intrinsic::wasm_q15mulr_saturate_signed);
17001+
Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_q15mulr_sat_signed);
1700317002
return Builder.CreateCall(Callee, {LHS, RHS});
1700417003
}
1700517004
case WebAssembly::BI__builtin_wasm_extmul_low_i8x16_s_i16x8:
@@ -17165,24 +17164,24 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1716517164
CGM.getIntrinsic(IntNo, {ConvertType(E->getType()), Low->getType()});
1716617165
return Builder.CreateCall(Callee, {Low, High});
1716717166
}
17168-
case WebAssembly::BI__builtin_wasm_widen_low_s_i32x4_i64x2:
17169-
case WebAssembly::BI__builtin_wasm_widen_high_s_i32x4_i64x2:
17170-
case WebAssembly::BI__builtin_wasm_widen_low_u_i32x4_i64x2:
17171-
case WebAssembly::BI__builtin_wasm_widen_high_u_i32x4_i64x2: {
17167+
case WebAssembly::BI__builtin_wasm_extend_low_s_i32x4_i64x2:
17168+
case WebAssembly::BI__builtin_wasm_extend_high_s_i32x4_i64x2:
17169+
case WebAssembly::BI__builtin_wasm_extend_low_u_i32x4_i64x2:
17170+
case WebAssembly::BI__builtin_wasm_extend_high_u_i32x4_i64x2: {
1717217171
Value *Vec = EmitScalarExpr(E->getArg(0));
1717317172
unsigned IntNo;
1717417173
switch (BuiltinID) {
17175-
case WebAssembly::BI__builtin_wasm_widen_low_s_i32x4_i64x2:
17176-
IntNo = Intrinsic::wasm_widen_low_signed;
17174+
case WebAssembly::BI__builtin_wasm_extend_low_s_i32x4_i64x2:
17175+
IntNo = Intrinsic::wasm_extend_low_signed;
1717717176
break;
17178-
case WebAssembly::BI__builtin_wasm_widen_high_s_i32x4_i64x2:
17179-
IntNo = Intrinsic::wasm_widen_high_signed;
17177+
case WebAssembly::BI__builtin_wasm_extend_high_s_i32x4_i64x2:
17178+
IntNo = Intrinsic::wasm_extend_high_signed;
1718017179
break;
17181-
case WebAssembly::BI__builtin_wasm_widen_low_u_i32x4_i64x2:
17182-
IntNo = Intrinsic::wasm_widen_low_unsigned;
17180+
case WebAssembly::BI__builtin_wasm_extend_low_u_i32x4_i64x2:
17181+
IntNo = Intrinsic::wasm_extend_low_unsigned;
1718317182
break;
17184-
case WebAssembly::BI__builtin_wasm_widen_high_u_i32x4_i64x2:
17185-
IntNo = Intrinsic::wasm_widen_high_unsigned;
17183+
case WebAssembly::BI__builtin_wasm_extend_high_u_i32x4_i64x2:
17184+
IntNo = Intrinsic::wasm_extend_high_unsigned;
1718617185
break;
1718717186
}
1718817187
Function *Callee = CGM.getIntrinsic(IntNo);
@@ -17203,16 +17202,16 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1720317202
Function *Callee = CGM.getIntrinsic(IntNo);
1720417203
return Builder.CreateCall(Callee, Vec);
1720517204
}
17206-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_s_f64x2_i32x4:
17207-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_u_f64x2_i32x4: {
17205+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_s_f64x2_i32x4:
17206+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_u_f64x2_i32x4: {
1720817207
Value *Vec = EmitScalarExpr(E->getArg(0));
1720917208
unsigned IntNo;
1721017209
switch (BuiltinID) {
17211-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_s_f64x2_i32x4:
17212-
IntNo = Intrinsic::wasm_trunc_saturate_zero_signed;
17210+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_s_f64x2_i32x4:
17211+
IntNo = Intrinsic::wasm_trunc_sat_zero_signed;
1721317212
break;
17214-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_u_f64x2_i32x4:
17215-
IntNo = Intrinsic::wasm_trunc_saturate_zero_unsigned;
17213+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_u_f64x2_i32x4:
17214+
IntNo = Intrinsic::wasm_trunc_sat_zero_unsigned;
1721617215
break;
1721717216
}
1721817217
Function *Callee = CGM.getIntrinsic(IntNo);

clang/lib/Headers/wasm_simd128.h

+8-16
Original file line numberDiff line numberDiff line change
@@ -616,14 +616,12 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_add(v128_t __a,
616616

617617
static __inline__ v128_t __DEFAULT_FN_ATTRS
618618
wasm_i8x16_add_saturate(v128_t __a, v128_t __b) {
619-
return (v128_t)__builtin_wasm_add_saturate_s_i8x16((__i8x16)__a,
620-
(__i8x16)__b);
619+
return (v128_t)__builtin_wasm_add_sat_s_i8x16((__i8x16)__a, (__i8x16)__b);
621620
}
622621

623622
static __inline__ v128_t __DEFAULT_FN_ATTRS
624623
wasm_u8x16_add_saturate(v128_t __a, v128_t __b) {
625-
return (v128_t)__builtin_wasm_add_saturate_u_i8x16((__u8x16)__a,
626-
(__u8x16)__b);
624+
return (v128_t)__builtin_wasm_add_sat_u_i8x16((__u8x16)__a, (__u8x16)__b);
627625
}
628626

629627
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_sub(v128_t __a,
@@ -633,14 +631,12 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_sub(v128_t __a,
633631

634632
static __inline__ v128_t __DEFAULT_FN_ATTRS
635633
wasm_i8x16_sub_saturate(v128_t __a, v128_t __b) {
636-
return (v128_t)__builtin_wasm_sub_saturate_s_i8x16((__i8x16)__a,
637-
(__i8x16)__b);
634+
return (v128_t)__builtin_wasm_sub_sat_s_i8x16((__i8x16)__a, (__i8x16)__b);
638635
}
639636

640637
static __inline__ v128_t __DEFAULT_FN_ATTRS
641638
wasm_u8x16_sub_saturate(v128_t __a, v128_t __b) {
642-
return (v128_t)__builtin_wasm_sub_saturate_u_i8x16((__u8x16)__a,
643-
(__u8x16)__b);
639+
return (v128_t)__builtin_wasm_sub_sat_u_i8x16((__u8x16)__a, (__u8x16)__b);
644640
}
645641

646642
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_min(v128_t __a,
@@ -706,14 +702,12 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_add(v128_t __a,
706702

707703
static __inline__ v128_t __DEFAULT_FN_ATTRS
708704
wasm_i16x8_add_saturate(v128_t __a, v128_t __b) {
709-
return (v128_t)__builtin_wasm_add_saturate_s_i16x8((__i16x8)__a,
710-
(__i16x8)__b);
705+
return (v128_t)__builtin_wasm_add_sat_s_i16x8((__i16x8)__a, (__i16x8)__b);
711706
}
712707

713708
static __inline__ v128_t __DEFAULT_FN_ATTRS
714709
wasm_u16x8_add_saturate(v128_t __a, v128_t __b) {
715-
return (v128_t)__builtin_wasm_add_saturate_u_i16x8((__u16x8)__a,
716-
(__u16x8)__b);
710+
return (v128_t)__builtin_wasm_add_sat_u_i16x8((__u16x8)__a, (__u16x8)__b);
717711
}
718712

719713
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_sub(v128_t __a,
@@ -723,14 +717,12 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_sub(v128_t __a,
723717

724718
static __inline__ v128_t __DEFAULT_FN_ATTRS
725719
wasm_i16x8_sub_saturate(v128_t __a, v128_t __b) {
726-
return (v128_t)__builtin_wasm_sub_saturate_s_i16x8((__i16x8)__a,
727-
(__i16x8)__b);
720+
return (v128_t)__builtin_wasm_sub_sat_s_i16x8((__i16x8)__a, (__i16x8)__b);
728721
}
729722

730723
static __inline__ v128_t __DEFAULT_FN_ATTRS
731724
wasm_u16x8_sub_saturate(v128_t __a, v128_t __b) {
732-
return (v128_t)__builtin_wasm_sub_saturate_u_i16x8((__u16x8)__a,
733-
(__u16x8)__b);
725+
return (v128_t)__builtin_wasm_sub_sat_u_i16x8((__u16x8)__a, (__u16x8)__b);
734726
}
735727

736728
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_mul(v128_t __a,

0 commit comments

Comments
 (0)