mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
1ec75cc513
Summary: With the removal of support for lazy parsing of combined index summary records (e.g. r267344), we no longer need to include the summary record bitcode offset in the VST entries for definitions. Change the combined index format to be similar to the per-module index format in using value ids to cross-reference from the summary record to the VST entry (rather than the summary record bitcode offset to cross-reference in the other direction). The visible changes are: 1) Add the value id to the combined summary records 2) Remove the summary offset from the combined VST records, which has the following effects: - No longer need the VST_CODE_COMBINED_GVDEFENTRY record, as all combined index VST entries now only contain the value id and corresponding GUID. - No longer have duplicate VST entries in the case where there are multiple definitions of a symbol (e.g. weak/linkonce), as they all have the same value id and GUID. An implication of #2 above is that in order to hook up an alias to the correct aliasee based on the value id of the aliasee recorded in the combined index alias record, we need to scan the entries in the index for that GUID to find the one from the same module (i.e. the case where there are multiple entries for the aliasee). But the reader no longer has to maintain a special map to hook up the alias/aliasee. Reviewers: joker.eph Subscribers: joker.eph, llvm-commits Differential Revision: http://reviews.llvm.org/D19481 llvm-svn: 267712
48 lines
1.9 KiB
LLVM
48 lines
1.9 KiB
LLVM
; Test to check the callgraph in summary
|
|
; RUN: opt -module-summary %s -o %t.o
|
|
; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s
|
|
; RUN: opt -module-summary %p/Inputs/thinlto-alias.ll -o %t2.o
|
|
; RUN: llvm-lto -thinlto -o %t3 %t.o %t2.o
|
|
; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED
|
|
|
|
; CHECK: <GLOBALVAL_SUMMARY_BLOCK
|
|
; CHECK-NEXT: <VERSION
|
|
; See if the call to func is registered, using the expected callsite count
|
|
; and value id matching the subsequent value symbol table.
|
|
; CHECK-NEXT: <PERMODULE {{.*}} op4=[[FUNCID:[0-9]+]] op5=1/>
|
|
; CHECK-NEXT: </GLOBALVAL_SUMMARY_BLOCK>
|
|
; CHECK-NEXT: <VALUE_SYMTAB
|
|
; CHECK-NEXT: <FNENTRY {{.*}} record string = 'main'
|
|
; External function analias should have entry with value id FUNCID
|
|
; CHECK-NEXT: <ENTRY {{.*}} op0=[[FUNCID]] {{.*}} record string = 'analias'
|
|
; CHECK-NEXT: </VALUE_SYMTAB>
|
|
|
|
; COMBINED: <GLOBALVAL_SUMMARY_BLOCK
|
|
; COMBINED-NEXT: <VERSION
|
|
; See if the call to analias is registered, using the expected callsite count
|
|
; and value id matching the subsequent value symbol table.
|
|
; COMBINED-NEXT: <COMBINED {{.*}} op5=[[ALIASID:[0-9]+]] op6=1/>
|
|
; Followed by the alias and aliasee
|
|
; COMBINED-NEXT: <COMBINED {{.*}}
|
|
; COMBINED-NEXT: <COMBINED_ALIAS {{.*}} op3=[[ALIASEEID:[0-9]+]]
|
|
; COMBINED-NEXT: </GLOBALVAL_SUMMARY_BLOCK
|
|
; COMBINED-NEXT: <VALUE_SYMTAB
|
|
; Entry for function func should have entry with value id ALIASID
|
|
; COMBINED-NEXT: <COMBINED_ENTRY {{.*}} op0=[[ALIASID]] op1=-5751648690987223394/>
|
|
; COMBINED-NEXT: <COMBINED
|
|
; COMBINED-NEXT: <COMBINED_ENTRY {{.*}} op0=[[ALIASEEID]] op1=-1039159065113703048/>
|
|
; COMBINED-NEXT: </VALUE_SYMTAB>
|
|
|
|
; ModuleID = 'thinlto-function-summary-callgraph.ll'
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
; Function Attrs: nounwind uwtable
|
|
define i32 @main() {
|
|
entry:
|
|
call void (...) @analias()
|
|
ret i32 0
|
|
}
|
|
|
|
declare void @analias(...)
|