Skip to content

Commit

Permalink
Make sure that value handle users see the transformation of an indire…
Browse files Browse the repository at this point in the history
…ct call to a direct call. This is important for the CallGraph iteration. Patch by Björn Steinbrink!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201822 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
nlewycky committed Feb 20, 2014
1 parent f17f214 commit 0aabe66
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/Transforms/InstCombine/InstCombineCalls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
23 changes: 23 additions & 0 deletions test/Transforms/InstCombine/cast-call-combine.ll
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit 0aabe66

Please sign in to comment.