Skip to content

Commit 4ab6bb5

Browse files
committed
RuntimeLibcalls: Add memset_pattern* calls to darwin systems
This is one of the easier cases to comprehend in TargetLibraryInfo's setup.
1 parent 03dc81d commit 4ab6bb5

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

llvm/include/llvm/IR/RuntimeLibcalls.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ struct RuntimeLibcallsInfo {
209209
return true;
210210
}
211211

212+
static bool darwinHasMemsetPattern(const Triple &TT) {
213+
// memset_pattern{4,8,16} is only available on iOS 3.0 and Mac OS X 10.5 and
214+
// later. All versions of watchOS support it.
215+
if (TT.isMacOSX())
216+
return !TT.isMacOSXVersionLT(10, 5);
217+
if (TT.isiOS())
218+
return !TT.isOSVersionLT(3, 0);
219+
return TT.isWatchOS();
220+
}
221+
212222
static bool hasAEABILibcalls(const Triple &TT) {
213223
return TT.isTargetAEABI() || TT.isTargetGNUAEABI() ||
214224
TT.isTargetMuslAEABI() || TT.isOSFuchsia() || TT.isAndroid();

llvm/include/llvm/IR/RuntimeLibcalls.td

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def isWindowsMSVCOrItaniumEnvironment : RuntimeLibcallPredicate<
5050
def isGNUEnvironment : RuntimeLibcallPredicate<"TT.isGNUEnvironment()">;
5151
def darwinHasSinCosStret : RuntimeLibcallPredicate<"darwinHasSinCosStret(TT)">;
5252
def darwinHasExp10 : RuntimeLibcallPredicate<"darwinHasExp10(TT)">;
53+
def darwinHasMemsetPattern : RuntimeLibcallPredicate<[{darwinHasMemsetPattern(TT)}]>;
5354

5455
def hasExp10 : RuntimeLibcallPredicate<[{!TT.isOSDarwin()}]>;
5556

@@ -1976,6 +1977,11 @@ defvar DarwinSinCosStret = LibcallImpls<(add __sincosf_stret, __sincos_stret,
19761977
darwinHasSinCosStret>;
19771978
defvar DarwinExp10 = LibcallImpls<(add __exp10f, __exp10), darwinHasExp10>;
19781979

1980+
defvar DarwinMemsetPattern = LibcallImpls<(add memset_pattern4,
1981+
memset_pattern8,
1982+
memset_pattern16),
1983+
darwinHasMemsetPattern>;
1984+
19791985
defvar SecurityCheckCookieIfWinMSVC =
19801986
LibcallImpls<(add __security_check_cookie, __security_cookie),
19811987
isWindowsMSVCOrItaniumEnvironment>;
@@ -2133,7 +2139,7 @@ def AArch64SystemLibrary : SystemRuntimeLibrary<
21332139
AArch64LibcallImpls,
21342140
LibcallImpls<(add Int128RTLibcalls), isAArch64_ILP64>,
21352141
LibcallImpls<(add bzero), isOSDarwin>,
2136-
DarwinExp10, DarwinSinCosStret,
2142+
DarwinExp10, DarwinSinCosStret, DarwinMemsetPattern,
21372143
LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
21382144
DefaultLibmExp10,
21392145
DefaultStackProtector,
@@ -2603,7 +2609,7 @@ def ARMSystemLibrary
26032609
WindowARMFPIntCasts,
26042610
SecurityCheckCookieIfWinMSVC,
26052611
AEABIDivRemCalls,
2606-
DarwinSinCosStret, DarwinExp10,
2612+
DarwinSinCosStret, DarwinExp10, DarwinMemsetPattern,
26072613
LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
26082614
DefaultLibmExp10,
26092615

@@ -3288,7 +3294,7 @@ defvar MemChkLibcalls = [__memcpy_chk, __memset_chk, __memmove_chk];
32883294

32893295
defvar X86CommonLibcalls =
32903296
(add (sub WinDefaultLibcallImpls, WindowsDivRemMulLibcallOverrides, MemChkLibcalls),
3291-
DarwinSinCosStret, DarwinExp10,
3297+
DarwinSinCosStret, DarwinExp10, DarwinMemsetPattern,
32923298
X86_F128_Libcalls,
32933299
LibmHasSinCosF80, // FIXME: Depends on long double
32943300
SinCosF32F64Libcalls,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
; REQUIRES: aarch64-registered-target, arm-registered-target, x86-registered-target
2+
3+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=i386-apple-macosx10.5 < %s | FileCheck -check-prefix=HAS-MEMSET-PATTERN %s
4+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=i386-apple-macosx10.4 < %s | FileCheck -check-prefix=NO-MEMSET-PATTERN %s
5+
6+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=x86_64-apple-macosx10.5 < %s | FileCheck -check-prefix=HAS-MEMSET-PATTERN %s
7+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=x86_64-apple-macosx10.4 < %s | FileCheck -check-prefix=NO-MEMSET-PATTERN %s
8+
9+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=arm64-apple-ios3 < %s | FileCheck -check-prefix=HAS-MEMSET-PATTERN %s
10+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=arm64-apple-ios2 < %s | FileCheck -check-prefix=NO-MEMSET-PATTERN %s
11+
12+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=thumbv7-apple-ios3 < %s | FileCheck -check-prefix=HAS-MEMSET-PATTERN %s
13+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=thumbv7-apple-ios2 < %s | FileCheck -check-prefix=NO-MEMSET-PATTERN %s
14+
15+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=arm64_32-apple-watchos < %s | FileCheck -check-prefix=HAS-MEMSET-PATTERN %s
16+
; RUN: opt -S -passes=declare-runtime-libcalls -mtriple=armv7k-apple-watchos < %s | FileCheck -check-prefix=HAS-MEMSET-PATTERN %s
17+
18+
; HAS-MEMSET-PATTERN: declare void @memset_pattern16(...)
19+
; HAS-MEMSET-PATTERN: declare void @memset_pattern4(...)
20+
; HAS-MEMSET-PATTERN: declare void @memset_pattern8(...)
21+
22+
; NO-MEMSET-PATTERN-NOT: memset_pattern

0 commit comments

Comments
 (0)