Skip to content

Commit f5764a8

Browse files
committed
[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 2f2ae08 commit f5764a8

File tree

11 files changed

+489
-458
lines changed

11 files changed

+489
-458
lines changed

clang/include/clang/Basic/BuiltinsWebAssembly.def

Lines changed: 15 additions & 15 deletions
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

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -17194,31 +17194,31 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1719417194
llvm_unreachable("unexpected builtin ID");
1719517195
}
1719617196
}
17197-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i8x16:
17198-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i8x16:
17199-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i16x8:
17200-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i16x8:
17201-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i8x16:
17202-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i8x16:
17203-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i16x8:
17204-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i16x8: {
17197+
case WebAssembly::BI__builtin_wasm_add_sat_s_i8x16:
17198+
case WebAssembly::BI__builtin_wasm_add_sat_u_i8x16:
17199+
case WebAssembly::BI__builtin_wasm_add_sat_s_i16x8:
17200+
case WebAssembly::BI__builtin_wasm_add_sat_u_i16x8:
17201+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i8x16:
17202+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i8x16:
17203+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i16x8:
17204+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i16x8: {
1720517205
unsigned IntNo;
1720617206
switch (BuiltinID) {
17207-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i8x16:
17208-
case WebAssembly::BI__builtin_wasm_add_saturate_s_i16x8:
17207+
case WebAssembly::BI__builtin_wasm_add_sat_s_i8x16:
17208+
case WebAssembly::BI__builtin_wasm_add_sat_s_i16x8:
1720917209
IntNo = Intrinsic::sadd_sat;
1721017210
break;
17211-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i8x16:
17212-
case WebAssembly::BI__builtin_wasm_add_saturate_u_i16x8:
17211+
case WebAssembly::BI__builtin_wasm_add_sat_u_i8x16:
17212+
case WebAssembly::BI__builtin_wasm_add_sat_u_i16x8:
1721317213
IntNo = Intrinsic::uadd_sat;
1721417214
break;
17215-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i8x16:
17216-
case WebAssembly::BI__builtin_wasm_sub_saturate_s_i16x8:
17217-
IntNo = Intrinsic::wasm_sub_saturate_signed;
17215+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i8x16:
17216+
case WebAssembly::BI__builtin_wasm_sub_sat_s_i16x8:
17217+
IntNo = Intrinsic::wasm_sub_sat_signed;
1721817218
break;
17219-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i8x16:
17220-
case WebAssembly::BI__builtin_wasm_sub_saturate_u_i16x8:
17221-
IntNo = Intrinsic::wasm_sub_saturate_unsigned;
17219+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i8x16:
17220+
case WebAssembly::BI__builtin_wasm_sub_sat_u_i16x8:
17221+
IntNo = Intrinsic::wasm_sub_sat_unsigned;
1722217222
break;
1722317223
default:
1722417224
llvm_unreachable("unexpected builtin ID");
@@ -17286,11 +17286,10 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1728617286
ConvertType(E->getType()));
1728717287
return Builder.CreateCall(Callee, {LHS, RHS});
1728817288
}
17289-
case WebAssembly::BI__builtin_wasm_q15mulr_saturate_s_i16x8: {
17289+
case WebAssembly::BI__builtin_wasm_q15mulr_sat_s_i16x8: {
1729017290
Value *LHS = EmitScalarExpr(E->getArg(0));
1729117291
Value *RHS = EmitScalarExpr(E->getArg(1));
17292-
Function *Callee =
17293-
CGM.getIntrinsic(Intrinsic::wasm_q15mulr_saturate_signed);
17292+
Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_q15mulr_sat_signed);
1729417293
return Builder.CreateCall(Callee, {LHS, RHS});
1729517294
}
1729617295
case WebAssembly::BI__builtin_wasm_extmul_low_i8x16_s_i16x8:
@@ -17456,24 +17455,24 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1745617455
CGM.getIntrinsic(IntNo, {ConvertType(E->getType()), Low->getType()});
1745717456
return Builder.CreateCall(Callee, {Low, High});
1745817457
}
17459-
case WebAssembly::BI__builtin_wasm_widen_low_s_i32x4_i64x2:
17460-
case WebAssembly::BI__builtin_wasm_widen_high_s_i32x4_i64x2:
17461-
case WebAssembly::BI__builtin_wasm_widen_low_u_i32x4_i64x2:
17462-
case WebAssembly::BI__builtin_wasm_widen_high_u_i32x4_i64x2: {
17458+
case WebAssembly::BI__builtin_wasm_extend_low_s_i32x4_i64x2:
17459+
case WebAssembly::BI__builtin_wasm_extend_high_s_i32x4_i64x2:
17460+
case WebAssembly::BI__builtin_wasm_extend_low_u_i32x4_i64x2:
17461+
case WebAssembly::BI__builtin_wasm_extend_high_u_i32x4_i64x2: {
1746317462
Value *Vec = EmitScalarExpr(E->getArg(0));
1746417463
unsigned IntNo;
1746517464
switch (BuiltinID) {
17466-
case WebAssembly::BI__builtin_wasm_widen_low_s_i32x4_i64x2:
17467-
IntNo = Intrinsic::wasm_widen_low_signed;
17465+
case WebAssembly::BI__builtin_wasm_extend_low_s_i32x4_i64x2:
17466+
IntNo = Intrinsic::wasm_extend_low_signed;
1746817467
break;
17469-
case WebAssembly::BI__builtin_wasm_widen_high_s_i32x4_i64x2:
17470-
IntNo = Intrinsic::wasm_widen_high_signed;
17468+
case WebAssembly::BI__builtin_wasm_extend_high_s_i32x4_i64x2:
17469+
IntNo = Intrinsic::wasm_extend_high_signed;
1747117470
break;
17472-
case WebAssembly::BI__builtin_wasm_widen_low_u_i32x4_i64x2:
17473-
IntNo = Intrinsic::wasm_widen_low_unsigned;
17471+
case WebAssembly::BI__builtin_wasm_extend_low_u_i32x4_i64x2:
17472+
IntNo = Intrinsic::wasm_extend_low_unsigned;
1747417473
break;
17475-
case WebAssembly::BI__builtin_wasm_widen_high_u_i32x4_i64x2:
17476-
IntNo = Intrinsic::wasm_widen_high_unsigned;
17474+
case WebAssembly::BI__builtin_wasm_extend_high_u_i32x4_i64x2:
17475+
IntNo = Intrinsic::wasm_extend_high_unsigned;
1747717476
break;
1747817477
default:
1747917478
llvm_unreachable("unexpected builtin ID");
@@ -17498,16 +17497,16 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
1749817497
Function *Callee = CGM.getIntrinsic(IntNo);
1749917498
return Builder.CreateCall(Callee, Vec);
1750017499
}
17501-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_s_f64x2_i32x4:
17502-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_u_f64x2_i32x4: {
17500+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_s_f64x2_i32x4:
17501+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_u_f64x2_i32x4: {
1750317502
Value *Vec = EmitScalarExpr(E->getArg(0));
1750417503
unsigned IntNo;
1750517504
switch (BuiltinID) {
17506-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_s_f64x2_i32x4:
17507-
IntNo = Intrinsic::wasm_trunc_saturate_zero_signed;
17505+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_s_f64x2_i32x4:
17506+
IntNo = Intrinsic::wasm_trunc_sat_zero_signed;
1750817507
break;
17509-
case WebAssembly::BI__builtin_wasm_trunc_saturate_zero_u_f64x2_i32x4:
17510-
IntNo = Intrinsic::wasm_trunc_saturate_zero_unsigned;
17508+
case WebAssembly::BI__builtin_wasm_trunc_sat_zero_u_f64x2_i32x4:
17509+
IntNo = Intrinsic::wasm_trunc_sat_zero_unsigned;
1751117510
break;
1751217511
default:
1751317512
llvm_unreachable("unexpected builtin ID");

clang/lib/Headers/wasm_simd128.h

Lines changed: 8 additions & 16 deletions
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)