Skip to content

Commit

Permalink
[TargetLibraryInfo] Pick new/delete calls by target
Browse files Browse the repository at this point in the history
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
  • Loading branch information
pogo59 committed Sep 28, 2021
1 parent bddc04b commit 56e681a
Show file tree
Hide file tree
Showing 5 changed files with 517 additions and 451 deletions.
59 changes: 59 additions & 0 deletions llvm/lib/Analysis/TargetLibraryInfo.cpp
Expand Up @@ -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
Expand Down

0 comments on commit 56e681a

Please sign in to comment.