mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
10eded2af8
Current LCG doesn't check aliased functions. So if an internal function has a public alias it will not be added to CG SCC, but it is still reachable from outside through the alias. So this patch adds aliased functions to SCC. Differential Revision: https://reviews.llvm.org/D59898 llvm-svn: 357795
39 lines
915 B
LLVM
39 lines
915 B
LLVM
; RUN: opt -disable-output -passes=print-lcg %s 2>&1 | FileCheck %s
|
|
;
|
|
; Aliased function should be reachable in CGSCC.
|
|
|
|
target triple = "x86_64-grtev4-linux-gnu"
|
|
|
|
; CHECK: Edges in function: foo
|
|
; CHECK: Edges in function: bar
|
|
; CHECK: Edges in function: baz
|
|
|
|
; CHECK: RefSCC with 1 call SCCs:
|
|
; CHECK-NEXT: SCC with 1 functions:
|
|
; CHECK-NEXT: bar
|
|
|
|
; CHECK: RefSCC with 1 call SCCs:
|
|
; CHECK-NEXT: SCC with 1 functions:
|
|
; CHECK-NEXT: foo
|
|
|
|
; CHECK-NOT: baz
|
|
|
|
@alias1 = weak dso_local alias i8* (i8*), i8* (i8*)* @foo
|
|
|
|
define dso_local i8* @foo(i8* %returned) {
|
|
ret i8* %returned
|
|
}
|
|
|
|
@alias2 = weak dso_local alias i8* (i8*), i8* (i8*)* @bar
|
|
|
|
define internal i8* @bar(i8* %returned) {
|
|
ret i8* %returned
|
|
}
|
|
|
|
; Internal alias is not reachable.
|
|
@alias3 = internal alias i8* (i8*), i8* (i8*)* @baz
|
|
|
|
define internal i8* @baz(i8* %returned) {
|
|
ret i8* %returned
|
|
}
|