Commit 08064c20 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r279268:

------------------------------------------------------------------------
r279268 | majnemer | 2016-08-19 09:37:40 -0700 (Fri, 19 Aug 2016) | 5 lines

[CloneFunction] Don't remove unrelated nodes from the CGSSC

CGSCC use a WeakVH to track call sites.  RAUW a call within a function
can result in that WeakVH getting confused about whether or not the call
site is still around.
------------------------------------------------------------------------

llvm-svn: 279477
parent f7ff8644
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -566,6 +566,12 @@ void llvm::CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc,
    if (!I)
      continue;

    // Skip over non-intrinsic callsites, we don't want to remove any nodes from
    // the CGSCC.
    CallSite CS = CallSite(I);
    if (CS && CS.getCalledFunction() && !CS.getCalledFunction()->isIntrinsic())
      continue;

    // See if this instruction simplifies.
    Value *SimpleV = SimplifyInstruction(I, DL);
    if (!SimpleV)
+24 −2
Original line number Diff line number Diff line
@@ -299,8 +299,8 @@ entry:
}

; CHECK-LABEL: define i32 @PR28802(
; CHECK: call i32 @PR28802.external(i32 0)
; CHECK: ret i32 0
; CHECK: %[[call:.*]] = call i32 @PR28802.external(i32 0)
; CHECK: ret i32 %[[call]]

define internal i32 @PR28848.callee(i32 %p2, i1 %c) {
entry:
@@ -322,3 +322,25 @@ entry:
}
; CHECK-LABEL: define i32 @PR28848(
; CHECK: ret i32 0

define internal void @callee7(i16 %param1, i16 %param2) {
entry:
  br label %bb

bb:
  %phi = phi i16 [ %param2, %entry ]
  %add = add i16 %phi, %param1
  ret void
}

declare i16 @caller7.external(i16 returned)

define void @caller7() {
bb1:
  %call = call i16 @caller7.external(i16 1)
  call void @callee7(i16 0, i16 %call)
  ret void
}
; CHECK-LABEL: define void @caller7(
; CHECK: %call = call i16 @caller7.external(i16 1)
; CHECK-NEXT: ret void