Make sure that value handle users see the transformation of an indirect call to a direct call. This is important for the CallGraph iteration. Patch by Björn Steinbrink!

llvm-svn: 201822
This commit is contained in:
Nick Lewycky 2014-02-20 23:00:15 +00:00
parent 0e73ec4550
commit 75080ff25d
2 changed files with 25 additions and 0 deletions

View File

@ -1212,6 +1212,8 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
if (!Caller->use_empty())
ReplaceInstUsesWith(*Caller, NV);
else if (Caller->hasValueHandle())
ValueHandleBase::ValueIsRAUWd(Caller, NV);
EraseInstFromFunction(*Caller);
return true;

View File

@ -0,0 +1,23 @@
; RUN: opt < %s -always-inline -instcombine -S | FileCheck %s
define internal void @foo(i16*) alwaysinline {
ret void
}
define void @bar() noinline noreturn {
unreachable
}
define void @test() {
br i1 false, label %then, label %else
then:
call void @bar()
unreachable
else:
; CHECK-NOT: call
call void bitcast (void (i16*)* @foo to void (i8*)*) (i8* null)
ret void
}