forked from OSchip/llvm-project
[BuildLibcalls] Mark some libcalls with inaccessiblememonly and inaccessiblemem_or_argmemonly
Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D94850
This commit is contained in:
parent
12edddafac
commit
05d891a19e
|
@ -910,6 +910,7 @@ bool llvm::inferLibFuncAttributes(Function &F, const TargetLibraryInfo &TLI) {
|
|||
return Changed;
|
||||
case LibFunc_dunder_strdup:
|
||||
case LibFunc_dunder_strndup:
|
||||
Changed |= setOnlyAccessesInaccessibleMemOrArgMem(F);
|
||||
Changed |= setDoesNotThrow(F);
|
||||
Changed |= setRetDoesNotAlias(F);
|
||||
Changed |= setWillReturn(F);
|
||||
|
@ -995,6 +996,20 @@ bool llvm::inferLibFuncAttributes(Function &F, const TargetLibraryInfo &TLI) {
|
|||
Changed |= setDoesNotCapture(F, 0);
|
||||
Changed |= setDoesNotCapture(F, 1);
|
||||
return Changed;
|
||||
case LibFunc_Znwj: // new(unsigned int)
|
||||
case LibFunc_Znwm: // new(unsigned long)
|
||||
case LibFunc_Znaj: // new[](unsigned int)
|
||||
case LibFunc_Znam: // new[](unsigned long)
|
||||
case LibFunc_msvc_new_int: // new(unsigned int)
|
||||
case LibFunc_msvc_new_longlong: // new(unsigned long long)
|
||||
case LibFunc_msvc_new_array_int: // new[](unsigned int)
|
||||
case LibFunc_msvc_new_array_longlong: // new[](unsigned long long)
|
||||
Changed |= setOnlyAccessesInaccessibleMemory(F);
|
||||
// Operator new always returns a nonnull noalias pointer
|
||||
Changed |= setRetNoUndef(F);
|
||||
Changed |= setRetNonNull(F);
|
||||
Changed |= setRetDoesNotAlias(F);
|
||||
return Changed;
|
||||
// TODO: add LibFunc entries for:
|
||||
// case LibFunc_memset_pattern4:
|
||||
// case LibFunc_memset_pattern8:
|
||||
|
|
|
@ -448,7 +448,7 @@ declare i32 @fputs(i8*, %opaque*)
|
|||
; CHECK: declare noundef i64 @fread(i8* nocapture noundef, i64 noundef, i64 noundef, %opaque* nocapture noundef) [[NOFREE_NOUNWIND]]
|
||||
declare i64 @fread(i8*, i64, i64, %opaque*)
|
||||
|
||||
; CHECK: declare void @free(i8* nocapture noundef) [[NOUNWIND:#[0-9]+]]
|
||||
; CHECK: declare void @free(i8* nocapture noundef) [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND:#[0-9]+]]
|
||||
declare void @free(i8*)
|
||||
|
||||
; CHECK: declare double @frexp(double, i32* nocapture) [[NOFREE_NOUNWIND_WILLRETURN]]
|
||||
|
@ -727,7 +727,7 @@ declare i64 @read(i32, i8*, i64)
|
|||
; CHECK: declare noundef i64 @readlink(i8* nocapture noundef readonly, i8* nocapture noundef, i64 noundef) [[NOFREE_NOUNWIND]]
|
||||
declare i64 @readlink(i8*, i8*, i64)
|
||||
|
||||
; CHECK: declare noalias noundef i8* @realloc(i8* nocapture, i64) [[NOUNWIND]]
|
||||
; CHECK: declare noalias noundef i8* @realloc(i8* nocapture, i64) [[INACCESSIBLEMEMORARGMEMONLY_NOUNWIND]]
|
||||
declare i8* @realloc(i8*, i64)
|
||||
|
||||
; CHECK: declare noundef i8* @reallocf(i8*, i64)
|
||||
|
|
Loading…
Reference in New Issue