Skip to content

Commit 2c90eb9

Browse files
authored
[clang][wasm] Replace the target integer add saturate intrinsics with the equivalent generic __builtin_elementwise_add_sat intrinsics (#109269)
Noticed while working on #109160 I've left out the sub_sat intrinsics for now - not sure about the history behind them using Intrinsic::wasm_sub_sat_* instead of Intrinsic::*sub_sat
1 parent e5717fb commit 2c90eb9

File tree

4 files changed

+5
-50
lines changed

4 files changed

+5
-50
lines changed

clang/include/clang/Basic/BuiltinsWebAssembly.def

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@ TARGET_BUILTIN(__builtin_wasm_trunc_saturate_u_i64_f64, "LLid", "nc", "nontrappi
6868
// SIMD builtins
6969
TARGET_BUILTIN(__builtin_wasm_swizzle_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
7070

71-
TARGET_BUILTIN(__builtin_wasm_add_sat_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
72-
TARGET_BUILTIN(__builtin_wasm_add_sat_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
73-
TARGET_BUILTIN(__builtin_wasm_add_sat_s_i16x8, "V8sV8sV8s", "nc", "simd128")
74-
TARGET_BUILTIN(__builtin_wasm_add_sat_u_i16x8, "V8UsV8UsV8Us", "nc", "simd128")
75-
7671
TARGET_BUILTIN(__builtin_wasm_sub_sat_s_i8x16, "V16ScV16ScV16Sc", "nc", "simd128")
7772
TARGET_BUILTIN(__builtin_wasm_sub_sat_u_i8x16, "V16UcV16UcV16Uc", "nc", "simd128")
7873
TARGET_BUILTIN(__builtin_wasm_sub_sat_s_i16x8, "V8sV8sV8s", "nc", "simd128")

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21443,24 +21443,12 @@ Value *CodeGenFunction::EmitWebAssemblyBuiltinExpr(unsigned BuiltinID,
2144321443
Function *Callee = CGM.getIntrinsic(Intrinsic::wasm_swizzle);
2144421444
return Builder.CreateCall(Callee, {Src, Indices});
2144521445
}
21446-
case WebAssembly::BI__builtin_wasm_add_sat_s_i8x16:
21447-
case WebAssembly::BI__builtin_wasm_add_sat_u_i8x16:
21448-
case WebAssembly::BI__builtin_wasm_add_sat_s_i16x8:
21449-
case WebAssembly::BI__builtin_wasm_add_sat_u_i16x8:
2145021446
case WebAssembly::BI__builtin_wasm_sub_sat_s_i8x16:
2145121447
case WebAssembly::BI__builtin_wasm_sub_sat_u_i8x16:
2145221448
case WebAssembly::BI__builtin_wasm_sub_sat_s_i16x8:
2145321449
case WebAssembly::BI__builtin_wasm_sub_sat_u_i16x8: {
2145421450
unsigned IntNo;
2145521451
switch (BuiltinID) {
21456-
case WebAssembly::BI__builtin_wasm_add_sat_s_i8x16:
21457-
case WebAssembly::BI__builtin_wasm_add_sat_s_i16x8:
21458-
IntNo = Intrinsic::sadd_sat;
21459-
break;
21460-
case WebAssembly::BI__builtin_wasm_add_sat_u_i8x16:
21461-
case WebAssembly::BI__builtin_wasm_add_sat_u_i16x8:
21462-
IntNo = Intrinsic::uadd_sat;
21463-
break;
2146421452
case WebAssembly::BI__builtin_wasm_sub_sat_s_i8x16:
2146521453
case WebAssembly::BI__builtin_wasm_sub_sat_s_i16x8:
2146621454
IntNo = Intrinsic::wasm_sub_sat_signed;

clang/lib/Headers/wasm_simd128.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -982,12 +982,12 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_add(v128_t __a,
982982

983983
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_add_sat(v128_t __a,
984984
v128_t __b) {
985-
return (v128_t)__builtin_wasm_add_sat_s_i8x16((__i8x16)__a, (__i8x16)__b);
985+
return (v128_t)__builtin_elementwise_add_sat((__i8x16)__a, (__i8x16)__b);
986986
}
987987

988988
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_add_sat(v128_t __a,
989989
v128_t __b) {
990-
return (v128_t)__builtin_wasm_add_sat_u_i8x16((__u8x16)__a, (__u8x16)__b);
990+
return (v128_t)__builtin_elementwise_add_sat((__u8x16)__a, (__u8x16)__b);
991991
}
992992

993993
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_sub(v128_t __a,
@@ -1068,12 +1068,12 @@ static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_add(v128_t __a,
10681068

10691069
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_add_sat(v128_t __a,
10701070
v128_t __b) {
1071-
return (v128_t)__builtin_wasm_add_sat_s_i16x8((__i16x8)__a, (__i16x8)__b);
1071+
return (v128_t)__builtin_elementwise_add_sat((__i16x8)__a, (__i16x8)__b);
10721072
}
10731073

10741074
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_add_sat(v128_t __a,
10751075
v128_t __b) {
1076-
return (v128_t)__builtin_wasm_add_sat_u_i16x8((__u16x8)__a, (__u16x8)__b);
1076+
return (v128_t)__builtin_elementwise_add_sat((__u16x8)__a, (__u16x8)__b);
10771077
}
10781078

10791079
static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_sub(v128_t __a,

clang/test/CodeGen/builtins-wasm.c

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -190,37 +190,9 @@ double max_f64(double x, double y) {
190190
// WEBASSEMBLY-NEXT: ret
191191
}
192192

193-
i8x16 add_sat_s_i8x16(i8x16 x, i8x16 y) {
194-
return __builtin_wasm_add_sat_s_i8x16(x, y);
195-
// MISSING-SIMD: error: '__builtin_wasm_add_sat_s_i8x16' needs target feature simd128
196-
// WEBASSEMBLY: call <16 x i8> @llvm.sadd.sat.v16i8(
197-
// WEBASSEMBLY-SAME: <16 x i8> %x, <16 x i8> %y)
198-
// WEBASSEMBLY-NEXT: ret
199-
}
200-
201-
u8x16 add_sat_u_i8x16(u8x16 x, u8x16 y) {
202-
return __builtin_wasm_add_sat_u_i8x16(x, y);
203-
// WEBASSEMBLY: call <16 x i8> @llvm.uadd.sat.v16i8(
204-
// WEBASSEMBLY-SAME: <16 x i8> %x, <16 x i8> %y)
205-
// WEBASSEMBLY-NEXT: ret
206-
}
207-
208-
i16x8 add_sat_s_i16x8(i16x8 x, i16x8 y) {
209-
return __builtin_wasm_add_sat_s_i16x8(x, y);
210-
// WEBASSEMBLY: call <8 x i16> @llvm.sadd.sat.v8i16(
211-
// WEBASSEMBLY-SAME: <8 x i16> %x, <8 x i16> %y)
212-
// WEBASSEMBLY-NEXT: ret
213-
}
214-
215-
u16x8 add_sat_u_i16x8(u16x8 x, u16x8 y) {
216-
return __builtin_wasm_add_sat_u_i16x8(x, y);
217-
// WEBASSEMBLY: call <8 x i16> @llvm.uadd.sat.v8i16(
218-
// WEBASSEMBLY-SAME: <8 x i16> %x, <8 x i16> %y)
219-
// WEBASSEMBLY-NEXT: ret
220-
}
221-
222193
i8x16 sub_sat_s_i8x16(i8x16 x, i8x16 y) {
223194
return __builtin_wasm_sub_sat_s_i8x16(x, y);
195+
// MISSING-SIMD: error: '__builtin_wasm_sub_sat_s_i8x16' needs target feature simd128
224196
// WEBASSEMBLY: call <16 x i8> @llvm.wasm.sub.sat.signed.v16i8(
225197
// WEBASSEMBLY-SAME: <16 x i8> %x, <16 x i8> %y)
226198
// WEBASSEMBLY-NEXT: ret

0 commit comments

Comments
 (0)