1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00
llvm-mirror/test/Other/devirt-invalidated.ll
Arthur Eubanks 0b315633ca [NewPM] Bail out of devirtualization wrapper if the current SCC is invalidated
The specific case that triggered this was when inlining a recursive
internal function into itself caused the recursion to go away, allowing
the inliner to mark the function as dead. The inliner marks the SCC as
invalidated but does not provide a new SCC to continue with.

This matches the implementations of ModuleToPostOrderCGSCCPassAdaptor
and CGSCCPassManager.

Fixes PR50363.

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D106306
2021-07-19 15:07:30 -07:00

31 lines
408 B
LLVM

; RUN: opt -passes='devirt<0>(inline)' < %s -S | FileCheck %s
; CHECK-NOT: internal
; CHECK: define void @e()
; CHECK-NOT: internal
define void @e() {
entry:
call void @b()
ret void
}
define internal void @b() {
entry:
call void @d()
call void @c()
ret void
}
define internal void @d() {
entry:
unreachable
}
define internal void @c() {
entry:
call void @b()
call void @e()
ret void
}