[llvm] 9b1e007 - [BasicAA] Remove unneeded special case for malloc/calloc

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue May 17 20:46:10 PDT 2022


Author: Philip Reames
Date: 2022-05-17T20:45:14-07:00
New Revision: 9b1e00738c5ddba681e17e5cb7c260d9afc4c3a7

URL: https://github.com/llvm/llvm-project/commit/9b1e00738c5ddba681e17e5cb7c260d9afc4c3a7
DIFF: https://github.com/llvm/llvm-project/commit/9b1e00738c5ddba681e17e5cb7c260d9afc4c3a7.diff

LOG: [BasicAA] Remove unneeded special case for malloc/calloc

This code pre-exists the generic handling for inaccessiblememonly.  If we remove it and update one test with inaccessiblememonly, nothing else changes.  Note that simply running O1 on that test would annotate malloc with the missing inaccessiblememonly.

Added: 
    

Modified: 
    llvm/lib/Analysis/BasicAliasAnalysis.cpp
    llvm/test/Transforms/GVN/nonescaping-malloc.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index cfb34686bd429..63d58425ce317 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -994,20 +994,6 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call,
     }
   }
 
-  // If the call is malloc/calloc like, we can assume that it doesn't
-  // modify any IR visible value.  This is only valid because we assume these
-  // routines do not read values visible in the IR.  TODO: Consider special
-  // casing realloc and strdup routines which access only their arguments as
-  // well.  Or alternatively, replace all of this with inaccessiblememonly once
-  // that's implemented fully.
-  if (isMallocOrCallocLikeFn(Call, &TLI)) {
-    // Be conservative if the accessed pointer may alias the allocation -
-    // fallback to the generic handling below.
-    if (getBestAAResults().alias(MemoryLocation::getBeforeOrAfter(Call), Loc,
-                                 AAQI) == AliasResult::NoAlias)
-      return ModRefInfo::NoModRef;
-  }
-
   // Ideally, there should be no need to special case for memcpy/memove
   // intrinsics here since general machinery (based on memory attributes) should
   // already handle it just fine. Unfortunately, it doesn't due to deficiency in

diff  --git a/llvm/test/Transforms/GVN/nonescaping-malloc.ll b/llvm/test/Transforms/GVN/nonescaping-malloc.ll
index fd61835e14a40..a2a7bda46f24b 100644
--- a/llvm/test/Transforms/GVN/nonescaping-malloc.ll
+++ b/llvm/test/Transforms/GVN/nonescaping-malloc.ll
@@ -35,7 +35,7 @@ entry:
 
 declare i64 @strlen(i8* nocapture) nounwind readonly
 
-declare noalias i8* @malloc(i64) nounwind
+declare noalias i8* @malloc(i64) nounwind inaccessiblememonly
 
 declare i32 @_ZN4llvm13StringMapImpl15LookupBucketForENS_9StringRefE(%"struct.llvm::StringMapImpl"*, i64, i64)
 


        


More information about the llvm-commits mailing list