mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
For PR21145: recognise a builtin call to a known deallocation function even if
it's defined in the current module. Clang generates this situation for the C++14 sized deallocation functions, because it generates a weak definition in case one isn't provided by the C++ runtime library. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226069 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
32467012f6
commit
ef7d38d35a
@ -319,7 +319,7 @@ const CallInst *llvm::isFreeCall(const Value *I, const TargetLibraryInfo *TLI) {
|
||||
if (!CI || isa<IntrinsicInst>(CI))
|
||||
return nullptr;
|
||||
Function *Callee = CI->getCalledFunction();
|
||||
if (Callee == nullptr || !Callee->isDeclaration())
|
||||
if (Callee == nullptr)
|
||||
return nullptr;
|
||||
|
||||
StringRef FnName = Callee->getName();
|
||||
|
@ -146,17 +146,36 @@ lpad.i: ; preds = %entry
|
||||
}
|
||||
|
||||
declare i8* @_Znwm(i64) nobuiltin
|
||||
declare void @_ZdlPvm(i8*, i64) nobuiltin
|
||||
declare i8* @_Znwj(i32) nobuiltin
|
||||
declare void @_ZdlPvj(i8*, i32) nobuiltin
|
||||
declare i8* @_Znam(i64) nobuiltin
|
||||
declare void @_ZdaPvm(i8*, i64) nobuiltin
|
||||
declare i8* @_Znaj(i32) nobuiltin
|
||||
declare void @_ZdaPvj(i8*, i32) nobuiltin
|
||||
declare void @_ZdlPv(i8*) nobuiltin
|
||||
declare void @_ZdaPv(i8*) nobuiltin
|
||||
|
||||
define linkonce void @_ZdlPvm(i8* %p, i64) nobuiltin {
|
||||
call void @_ZdlPv(i8* %p)
|
||||
ret void
|
||||
}
|
||||
define linkonce void @_ZdlPvj(i8* %p, i32) nobuiltin {
|
||||
call void @_ZdlPv(i8* %p)
|
||||
ret void
|
||||
}
|
||||
define linkonce void @_ZdaPvm(i8* %p, i64) nobuiltin {
|
||||
call void @_ZdaPv(i8* %p)
|
||||
ret void
|
||||
}
|
||||
define linkonce void @_ZdaPvj(i8* %p, i32) nobuiltin {
|
||||
call void @_ZdaPv(i8* %p)
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @test8(
|
||||
define void @test8() {
|
||||
; CHECK-NOT: call
|
||||
%nw = call i8* @_Znwm(i64 32) builtin
|
||||
call void @_ZdlPv(i8* %nw) builtin
|
||||
%na = call i8* @_Znam(i64 32) builtin
|
||||
call void @_ZdaPv(i8* %na) builtin
|
||||
%nwm = call i8* @_Znwm(i64 32) builtin
|
||||
call void @_ZdlPvm(i8* %nwm, i64 32) builtin
|
||||
%nwj = call i8* @_Znwj(i32 32) builtin
|
||||
|
Loading…
Reference in New Issue
Block a user