Arthur Eubanks 7a94d189ad [LazyCallGraph] Update libcall list when replacing a libcall node's function
Otherwise when we visit all libcalls in
updateCGAndAnalysisManagerForPass(), the old libcall is dead and doesn't
have a node.

We treat libcalls conservatively in LazyCallGraph because any function
may introduce calls to them out of thin air.

It is weird to change the signature of a libcall since introducing calls
to the libcall with a different signature may break, but other passes
like deadargelim already do it, so let's preserve this behavior for now.

Fixes an issue found in D128830.

Reviewed By: psamolysov

Differential Revision: https://reviews.llvm.org/D132764
2022-08-27 10:57:53 -07:00

18 lines
364 B
LLVM

; RUN: opt -passes=inline,argpromotion < %s -S | FileCheck %s
; Make sure we update the list of libcalls when we replace a libcall.
; CHECK: define {{.*}}@a
define void @a() {
entry:
%call = call float @strtof(ptr noundef null, ptr noundef null)
ret void
}
define internal float @strtof(ptr noundef %0, ptr noundef %1) nounwind {
entry:
ret float 0.0
}