Revert "[BasicAA] Remove unneeded special case for malloc/calloc"

This reverts commit 9b1e00738c.

Nikic reported in commit thread that I had forgotten history here, and that a) we'd tried this before, and b) had to revert due to an unexpected codegen impact.  Current measurements confirm the same issue still exists.
This commit is contained in:
Philip Reames
2022-05-18 07:33:39 -07:00
parent 4273e616e5
commit f7988d08a8
2 changed files with 15 additions and 1 deletions

View File

@@ -994,6 +994,20 @@ 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

View File

@@ -35,7 +35,7 @@ entry:
declare i64 @strlen(i8* nocapture) nounwind readonly
declare noalias i8* @malloc(i64) nounwind inaccessiblememonly
declare noalias i8* @malloc(i64) nounwind
declare i32 @_ZN4llvm13StringMapImpl15LookupBucketForENS_9StringRefE(%"struct.llvm::StringMapImpl"*, i64, i64)