@@ -39,6 +39,14 @@ def hasSinCos : RuntimeLibcallPredicate<"hasSinCos(TT)">;
39
39
// FIXME: Way to combine predicates
40
40
def hasSinCos_f32_f64 : RuntimeLibcallPredicate<"hasSinCos_f32_f64(TT)">;
41
41
42
+ def ExceptionModelIsNotNone : RuntimeLibcallPredicate<
43
+ [{ExceptionModel != ExceptionHandling::None}]
44
+ >;
45
+
46
+ def ExceptionModelIsSjLj : RuntimeLibcallPredicate<
47
+ [{ExceptionModel == ExceptionHandling::SjLj}]
48
+ >;
49
+
42
50
//--------------------------------------------------------------------
43
51
// Declare all kinds of used libcalls
44
52
//--------------------------------------------------------------------
@@ -707,10 +715,6 @@ foreach MemSize = [ 1, 2, 4, 8, 16 ] in {
707
715
!cast<RuntimeLibcall>("MEMSET_ELEMENT_UNORDERED_ATOMIC_"#MemSize)>;
708
716
}
709
717
710
- // Exception handling
711
- def _Unwind_Resume : RuntimeLibcallImpl<UNWIND_RESUME>;
712
- def __cxa_end_cleanup : RuntimeLibcallImpl<CXA_END_CLEANUP>;
713
-
714
718
// Atomic '__sync_*' libcalls.
715
719
foreach lc = LibCalls__sync in {
716
720
def __#!tolower(!cast<string>(lc)) : RuntimeLibcallImpl<lc>;
@@ -1014,9 +1018,20 @@ defm sincos : LibmLongDoubleLibCall;
1014
1018
1015
1019
def bzero : RuntimeLibcallImpl<BZERO>;
1016
1020
def __bzero : RuntimeLibcallImpl<BZERO>;
1017
- def _Unwind_SjLj_Resume : RuntimeLibcallImpl<UNWIND_RESUME>;
1018
- def _Unwind_SjLj_Register : RuntimeLibcallImpl<UNWIND_REGISTER>;
1019
- def _Unwind_SjLj_Unregister : RuntimeLibcallImpl<UNWIND_UNREGISTER>;
1021
+
1022
+ // Exception handling
1023
+ defset list<RuntimeLibcallImpl> DefaultExceptionHandlingLibcalls = {
1024
+ def _Unwind_Resume : RuntimeLibcallImpl<UNWIND_RESUME>;
1025
+ def __cxa_end_cleanup : RuntimeLibcallImpl<CXA_END_CLEANUP>;
1026
+ }
1027
+
1028
+ defset list<RuntimeLibcallImpl> SjLjExceptionHandlingLibcalls = {
1029
+ def _Unwind_SjLj_Resume : RuntimeLibcallImpl<UNWIND_RESUME>;
1030
+ def _Unwind_SjLj_Register : RuntimeLibcallImpl<UNWIND_REGISTER>;
1031
+ def _Unwind_SjLj_Unregister : RuntimeLibcallImpl<UNWIND_UNREGISTER>;
1032
+ }
1033
+
1034
+ // Only used on wasm?
1020
1035
def _Unwind_CallPersonality : RuntimeLibcallImpl<UNWIND_CALL_PERSONALITY>;
1021
1036
1022
1037
// Used on OpenBSD
@@ -1092,6 +1107,13 @@ defset list<RuntimeLibcallImpl> LibmF128FiniteLibcalls = {
1092
1107
// Common Libcall Sets
1093
1108
//===----------------------------------------------------------------------===//
1094
1109
1110
+ defvar ExceptionModelCalls = (add
1111
+ LibcallImpls<(add DefaultExceptionHandlingLibcalls),
1112
+ ExceptionModelIsNotNone>,
1113
+ LibcallImpls<(add SjLjExceptionHandlingLibcalls),
1114
+ ExceptionModelIsSjLj>
1115
+ );
1116
+
1095
1117
// FIXME: Should move to explicit opt-in to different sets of libcalls
1096
1118
// instead of trying to remove from a default set. We have
1097
1119
// unreasonable defaults like reporting f80 calls on most targets when
@@ -1112,19 +1134,25 @@ defvar DefaultRuntimeLibcallImpls_f128 =
1112
1134
!filter(entry, AllDefaultRuntimeLibcallImpls,
1113
1135
!match(!cast<string>(entry.Provides), "_F128"));
1114
1136
1115
- defvar DefaultRuntimeLibcallImpls =
1137
+ // FIXME: Ideally we would just use dags everywhere, but for the
1138
+ // arm64ec case we need iterable lists so we can add the # prefix
1139
+ defvar DefaultRuntimeLibcallImplsBaseList =
1116
1140
!listremove(
1117
1141
!listremove(
1118
1142
!listremove(AllDefaultRuntimeLibcallImpls, Int128RTLibcalls),
1119
1143
DefaultRuntimeLibcallImpls_f80),
1120
1144
DefaultRuntimeLibcallImpls_ppcf128);
1121
1145
1146
+ defvar DefaultRuntimeLibcallImpls =
1147
+ (add DefaultRuntimeLibcallImplsBaseList,
1148
+ ExceptionModelCalls);
1149
+
1122
1150
/// Default set of libcall impls for 32-bit architectures.
1123
- defvar DefaultLibcallImpls32 = DefaultRuntimeLibcallImpls;
1151
+ defvar DefaultLibcallImpls32 = (add DefaultRuntimeLibcallImpls) ;
1124
1152
1125
1153
/// Default set of libcall impls for 64-bit architectures.
1126
- defvar DefaultLibcallImpls64 = !listconcat( DefaultRuntimeLibcallImpls,
1127
- Int128RTLibcalls);
1154
+ defvar DefaultLibcallImpls64 = (add DefaultRuntimeLibcallImpls,
1155
+ Int128RTLibcalls);
1128
1156
1129
1157
defvar DarwinSinCosStret = LibcallImpls<(add __sincosf_stret, __sincos_stret),
1130
1158
darwinHasSinCosStret>;
@@ -1160,7 +1188,12 @@ defvar WindowsExclusions = !listconcat(WindowsMathRemovals, MostPowI);
1160
1188
1161
1189
// Targets which support windows should start with these as a base and
1162
1190
// add in calls for other OSes
1163
- defvar WinDefaultLibcallImpls = !listremove(DefaultRuntimeLibcallImpls, WindowsExclusions);
1191
+ defvar WinDefaultLibcallImplsBaseList =
1192
+ !listremove(DefaultRuntimeLibcallImplsBaseList,
1193
+ WindowsExclusions);
1194
+
1195
+ defvar WinDefaultLibcallImpls = (add WinDefaultLibcallImplsBaseList,
1196
+ ExceptionModelCalls);
1164
1197
1165
1198
defvar LibmHasFrexpF32 = LibcallImpls<(add frexpf), isNotOSWindowsOrIsCygwinMinGW>;
1166
1199
defvar LibmHasLdexpF32 = LibcallImpls<(add ldexpf), isNotOSWindowsOrIsCygwinMinGW>;
@@ -1290,7 +1323,7 @@ def AArch64SystemLibrary : SystemRuntimeLibrary<
1290
1323
1291
1324
// Prepend a # to every name
1292
1325
defset list<RuntimeLibcallImpl> WinArm64ECDefaultRuntimeLibcallImpls = {
1293
- foreach libcall = WinDefaultLibcallImpls in {
1326
+ foreach libcall = WinDefaultLibcallImplsBaseList in {
1294
1327
def arm64ec_#libcall : DuplicateLibcallImplWithPrefix<libcall, "#">;
1295
1328
}
1296
1329
@@ -1301,12 +1334,32 @@ defset list<RuntimeLibcallImpl> WinArm64ECDefaultRuntimeLibcallImpls = {
1301
1334
1302
1335
def arm64ec___stack_chk_fail : DuplicateLibcallImplWithPrefix<__stack_chk_fail, "#">;
1303
1336
1337
+ defset list<RuntimeLibcallImpl> WinArm64ECDefaultExceptionHandlingLibcalls = {
1338
+ foreach libcall = DefaultExceptionHandlingLibcalls in {
1339
+ def arm64ec_#libcall : DuplicateLibcallImplWithPrefix<libcall, "#">;
1340
+ }
1341
+ }
1342
+
1343
+ defset list<RuntimeLibcallImpl> WinArm64ECSjLjExceptionHandlingLibcalls = {
1344
+ foreach libcall = SjLjExceptionHandlingLibcalls in {
1345
+ def arm64ec_#libcall : DuplicateLibcallImplWithPrefix<libcall, "#">;
1346
+ }
1347
+ }
1348
+
1349
+ defvar ExceptionModelCallsArm64EC = (add
1350
+ LibcallImpls<(add WinArm64ECDefaultExceptionHandlingLibcalls),
1351
+ ExceptionModelIsNotNone>,
1352
+ LibcallImpls<(add WinArm64ECSjLjExceptionHandlingLibcalls),
1353
+ ExceptionModelIsSjLj>
1354
+ );
1355
+
1304
1356
def WindowsARM64ECSystemLibrary
1305
1357
: SystemRuntimeLibrary<isWindowsArm64EC,
1306
1358
(add WinArm64ECDefaultRuntimeLibcallImpls,
1307
1359
arm64ec___stack_chk_fail,
1308
1360
LibcallImpls<(add __security_check_cookie_arm64ec),
1309
- isWindowsMSVCEnvironment>)>;
1361
+ isWindowsMSVCEnvironment>,
1362
+ ExceptionModelCallsArm64EC)>;
1310
1363
1311
1364
//===----------------------------------------------------------------------===//
1312
1365
// AMDGPU Runtime Libcalls
@@ -2345,7 +2398,7 @@ defvar X86CommonLibcalls =
2345
2398
// hack for one test relying on it.
2346
2399
__powitf2_f128,
2347
2400
DefaultStackProtector
2348
- );
2401
+ );
2349
2402
2350
2403
defvar Windows32DivRemMulCalls =
2351
2404
LibcallsWithCC<(add WindowsDivRemMulLibcalls), X86_STDCALL,
@@ -2489,6 +2542,7 @@ def WasmSystemLibrary
2489
2542
(add DefaultRuntimeLibcallImpls, Int128RTLibcalls,
2490
2543
CompilerRTOnlyInt64Libcalls, CompilerRTOnlyInt128Libcalls,
2491
2544
exp10f, exp10,
2545
+ _Unwind_CallPersonality,
2492
2546
emscripten_return_address,
2493
2547
__stack_chk_fail)>;
2494
2548
0 commit comments