[llvm] c72c22c - [InstCombine] Don't check for alloc fn before fetching object size
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 21 01:45:13 PDT 2022
Author: Nikita Popov
Date: 2022-07-21T10:45:03+02:00
New Revision: c72c22c04df992c95c5912d0075e5263c88f9fec
URL: https://github.com/llvm/llvm-project/commit/c72c22c04df992c95c5912d0075e5263c88f9fec
DIFF: https://github.com/llvm/llvm-project/commit/c72c22c04df992c95c5912d0075e5263c88f9fec.diff
LOG: [InstCombine] Don't check for alloc fn before fetching object size
This code is just interested in the allocsize, not any other
allocator properties.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 6a2cfd63573a4..b1106d655535c 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -2885,7 +2885,7 @@ bool InstCombinerImpl::annotateAnyAllocSite(CallBase &Call,
// of the respective allocator declaration with generic attributes.
bool Changed = false;
- if (isAllocationFn(&Call, TLI)) {
+ if (Call.getType()->isPointerTy()) {
uint64_t Size;
ObjectSizeOpts Opts;
if (getObjectSize(&Call, Size, DL, TLI, Opts) && Size > 0) {
diff --git a/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll b/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
index 0b529358f6bee..41a2427b683d3 100644
--- a/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
+++ b/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
@@ -13,6 +13,8 @@ declare noalias i8* @aligned_alloc(i64, i64)
declare noalias align 16 i8* @memalign(i64, i64)
; new[](unsigned int, align_val_t)
declare noalias i8* @_ZnajSt11align_val_t(i64 %size, i64 %align)
+declare i8* @my_malloc(i64) allocsize(0)
+declare i8* @my_calloc(i64, i64) allocsize(0, 1)
@.str = private unnamed_addr constant [6 x i8] c"hello\00", align 1
@@ -354,3 +356,20 @@ define noalias i8* @op_new_align() {
ret i8* %call
}
+define i8* @my_malloc_constant_size() {
+; CHECK-LABEL: @my_malloc_constant_size(
+; CHECK-NEXT: [[CALL:%.*]] = call dereferenceable_or_null(32) i8* @my_malloc(i64 32)
+; CHECK-NEXT: ret i8* [[CALL]]
+;
+ %call = call i8* @my_malloc(i64 32)
+ ret i8* %call
+}
+
+define i8* @my_calloc_constant_size() {
+; CHECK-LABEL: @my_calloc_constant_size(
+; CHECK-NEXT: [[CALL:%.*]] = call dereferenceable_or_null(128) i8* @my_calloc(i64 32, i64 4)
+; CHECK-NEXT: ret i8* [[CALL]]
+;
+ %call = call i8* @my_calloc(i64 32, i64 4)
+ ret i8* %call
+}
More information about the llvm-commits
mailing list