summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Bolvansky <david.bolvansky@gmail.com>2019-09-11 10:37:03 +0000
committerDavid Bolvansky <david.bolvansky@gmail.com>2019-09-11 10:37:03 +0000
commit4dae283cd3e74f0ccacac14b3080a321cee740b3 (patch)
tree51e86c3a362288b55664164c8a51c104d322a434
parente79381c3f7a6da15dc632ecf02ab38805bf2761a (diff)
downloadbcm5719-llvm-4dae283cd3e74f0ccacac14b3080a321cee740b3.tar.gz
bcm5719-llvm-4dae283cd3e74f0ccacac14b3080a321cee740b3.zip
[InstCombine] Fixed handling of isOpNewLike (PR11748)
llvm-svn: 371602
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp15
-rw-r--r--llvm/test/Transforms/InstCombine/deref-alloc-fns.ll12
2 files changed, 19 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 3863e5fcb8f..1cef8d956b7 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -4190,13 +4190,14 @@ static void annotateAnyAllocSite(CallBase &Call, const TargetLibraryInfo *TLI) {
return;
if (isMallocLikeFn(&Call, TLI) && Op0C) {
- Call.addAttribute(AttributeList::ReturnIndex,
- Attribute::getWithDereferenceableOrNullBytes(
- Call.getContext(), Op0C->getZExtValue()));
- } else if (isOpNewLikeFn(&Call, TLI) && Op0C) {
- Call.addAttribute(AttributeList::ReturnIndex,
- Attribute::getWithDereferenceableBytes(
- Call.getContext(), Op0C->getZExtValue()));
+ if (isOpNewLikeFn(&Call, TLI))
+ Call.addAttribute(AttributeList::ReturnIndex,
+ Attribute::getWithDereferenceableBytes(
+ Call.getContext(), Op0C->getZExtValue()));
+ else
+ Call.addAttribute(AttributeList::ReturnIndex,
+ Attribute::getWithDereferenceableOrNullBytes(
+ Call.getContext(), Op0C->getZExtValue()));
} else if (isReallocLikeFn(&Call, TLI) && Op1C) {
Call.addAttribute(AttributeList::ReturnIndex,
Attribute::getWithDereferenceableOrNullBytes(
diff --git a/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll b/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
index 794d811cdca..f188510dfdf 100644
--- a/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
+++ b/llvm/test/Transforms/InstCombine/deref-alloc-fns.ll
@@ -5,6 +5,7 @@ declare noalias i8* @malloc(i64)
declare noalias i8* @calloc(i64, i64)
declare noalias i8* @realloc(i8* nocapture, i64)
declare noalias nonnull i8* @_Znam(i64) ; throwing version of 'new'
+declare noalias nonnull i8* @_Znwm(i64) ; throwing version of 'new'
define noalias i8* @malloc_nonconstant_size(i64 %n) {
; CHECK-LABEL: @malloc_nonconstant_size(
@@ -181,13 +182,22 @@ define noalias i8* @op_new_nonconstant_size(i64 %n) {
define noalias i8* @op_new_constant_size() {
; CHECK-LABEL: @op_new_constant_size(
-; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable_or_null(40) i8* @_Znam(i64 40)
+; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable(40) i8* @_Znam(i64 40)
; CHECK-NEXT: ret i8* [[CALL]]
;
%call = tail call i8* @_Znam(i64 40)
ret i8* %call
}
+define noalias i8* @op_new_constant_size2() {
+; CHECK-LABEL: @op_new_constant_size2(
+; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable(40) i8* @_Znwm(i64 40)
+; CHECK-NEXT: ret i8* [[CALL]]
+;
+ %call = tail call i8* @_Znwm(i64 40)
+ ret i8* %call
+}
+
define noalias i8* @op_new_constant_zero_size() {
; CHECK-LABEL: @op_new_constant_zero_size(
; CHECK-NEXT: [[CALL:%.*]] = tail call i8* @_Znam(i64 0)
OpenPOWER on IntegriCloud