forked from OSchip/llvm-project
[InstCombine] Fixed handling of isOpNewLike (PR11748)
llvm-svn: 371602
This commit is contained in:
parent
e79381c3f7
commit
4dae283cd3
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue