aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/TargetLibraryInfo.cpp
diff options
context:
space:
mode:
authorPaul Robinson <paul.robinson@sony.com>2021-09-24 06:10:02 -0700
committerPaul Robinson <paul.robinson@sony.com>2021-09-28 10:10:25 -0700
commit56e681afcce53d2a6eb1df2724c715bd95a43a25 (patch)
tree59c24400d725660c450cb6acb688f8ffb4158ab9 /llvm/lib/Analysis/TargetLibraryInfo.cpp
parentbddc04bc4cd5fed35b5fc10955612b6718696a95 (diff)
downloadllvm-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.cpp59
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