diff options
author | Paul Robinson <paul.robinson@sony.com> | 2021-09-24 06:10:02 -0700 |
---|---|---|
committer | Paul Robinson <paul.robinson@sony.com> | 2021-09-28 10:10:25 -0700 |
commit | 56e681afcce53d2a6eb1df2724c715bd95a43a25 (patch) | |
tree | 59c24400d725660c450cb6acb688f8ffb4158ab9 /llvm/lib/Analysis/TargetLibraryInfo.cpp | |
parent | bddc04bc4cd5fed35b5fc10955612b6718696a95 (diff) | |
download | llvm-56e681afcce53d2a6eb1df2724c715bd95a43a25.zip llvm-56e681afcce53d2a6eb1df2724c715bd95a43a25.tar.gz llvm-56e681afcce53d2a6eb1df2724c715bd95a43a25.tar.bz2 |
[TargetLibraryInfo] Pick new/delete calls by target
There are two sets of new/delete functions, one with Windows/MSVC
mangling and one with Itanium mangling. Mark one set or the other
as unavailable depending on the target.
Split the test malloc-free-delete.ll into three parts: malloc-free.dll
for the C API tests, new-delete-itanium.ll and new-delete-msvc.ll for
the target-specific new/delete tests.
Differential Revision: https://reviews.llvm.org/D110419
Diffstat (limited to 'llvm/lib/Analysis/TargetLibraryInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index a916ba6..530e039 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -414,6 +414,65 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, TLI.setUnavailable(LibFunc_utimes); } + // Pick just one set of new/delete variants. + if (T.isOSMSVCRT()) { + // MSVC, doesn't have the Itanium new/delete. + TLI.setUnavailable(LibFunc_ZdaPv); + TLI.setUnavailable(LibFunc_ZdaPvRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZdaPvSt11align_val_t); + TLI.setUnavailable(LibFunc_ZdaPvSt11align_val_tRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZdaPvj); + TLI.setUnavailable(LibFunc_ZdaPvjSt11align_val_t); + TLI.setUnavailable(LibFunc_ZdaPvm); + TLI.setUnavailable(LibFunc_ZdaPvmSt11align_val_t); + TLI.setUnavailable(LibFunc_ZdlPv); + TLI.setUnavailable(LibFunc_ZdlPvRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZdlPvSt11align_val_t); + TLI.setUnavailable(LibFunc_ZdlPvSt11align_val_tRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZdlPvj); + TLI.setUnavailable(LibFunc_ZdlPvjSt11align_val_t); + TLI.setUnavailable(LibFunc_ZdlPvm); + TLI.setUnavailable(LibFunc_ZdlPvmSt11align_val_t); + TLI.setUnavailable(LibFunc_Znaj); + TLI.setUnavailable(LibFunc_ZnajRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZnajSt11align_val_t); + TLI.setUnavailable(LibFunc_ZnajSt11align_val_tRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_Znam); + TLI.setUnavailable(LibFunc_ZnamRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZnamSt11align_val_t); + TLI.setUnavailable(LibFunc_ZnamSt11align_val_tRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_Znwj); + TLI.setUnavailable(LibFunc_ZnwjRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZnwjSt11align_val_t); + TLI.setUnavailable(LibFunc_ZnwjSt11align_val_tRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_Znwm); + TLI.setUnavailable(LibFunc_ZnwmRKSt9nothrow_t); + TLI.setUnavailable(LibFunc_ZnwmSt11align_val_t); + TLI.setUnavailable(LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t); + } else { + // Not MSVC, assume it's Itanium. + TLI.setUnavailable(LibFunc_msvc_new_int); + TLI.setUnavailable(LibFunc_msvc_new_int_nothrow); + TLI.setUnavailable(LibFunc_msvc_new_longlong); + TLI.setUnavailable(LibFunc_msvc_new_longlong_nothrow); + TLI.setUnavailable(LibFunc_msvc_delete_ptr32); + TLI.setUnavailable(LibFunc_msvc_delete_ptr32_nothrow); + TLI.setUnavailable(LibFunc_msvc_delete_ptr32_int); + TLI.setUnavailable(LibFunc_msvc_delete_ptr64); + TLI.setUnavailable(LibFunc_msvc_delete_ptr64_nothrow); + TLI.setUnavailable(LibFunc_msvc_delete_ptr64_longlong); + TLI.setUnavailable(LibFunc_msvc_new_array_int); + TLI.setUnavailable(LibFunc_msvc_new_array_int_nothrow); + TLI.setUnavailable(LibFunc_msvc_new_array_longlong); + TLI.setUnavailable(LibFunc_msvc_new_array_longlong_nothrow); + TLI.setUnavailable(LibFunc_msvc_delete_array_ptr32); + TLI.setUnavailable(LibFunc_msvc_delete_array_ptr32_nothrow); + TLI.setUnavailable(LibFunc_msvc_delete_array_ptr32_int); + TLI.setUnavailable(LibFunc_msvc_delete_array_ptr64); + TLI.setUnavailable(LibFunc_msvc_delete_array_ptr64_nothrow); + TLI.setUnavailable(LibFunc_msvc_delete_array_ptr64_longlong); + } + switch (T.getOS()) { case Triple::MacOSX: // exp10 and exp10f are not available on OS X until 10.9 and iOS until 7.0 |