
Simplify the compiler-rt test to make it more general for different platforms, and use `*DAG` matchers for lines that may be emitted out-of-order. - The compiler-rt test passed on a Windows machine. Previously name matchers don't work for MSVC mangling (https://lab.llvm.org/buildbot/#/builders/127/builds/59907) - `*DAG` matchers fixed the error in https://lab.llvm.org/buildbot/#/builders/94/builds/17924 This is the second reland and fixed errors caught in first reland (https://github.com/llvm/llvm-project/pull/75860) **Original commit message** Commit fe05193 (phab D156569), IRPGO names uses format `[<filepath>;]<linkage-name>` while prior format is `[<filepath>:<mangled-name>`. The format change would break the use case demonstrated in (updated) `llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll` and `compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp` This patch changes `GlobalValues::getGlobalIdentifer` to use the semicolon. To elaborate on the scenario how things break without this PR 1. IRPGO raw profiles stores (compressed) IRPGO names of functions in one section, and per-function profile data in another section. The [NameRef](fc715e4cd9/compiler-rt/include/profile/InstrProfData.inc (L72)
) field in per-function profile data is the MD5 hash of IRPGO names. 2. When raw profiles are converted to indexed format profiles, the profiled address is [mapped](fc715e4cd9/llvm/lib/ProfileData/InstrProf.cpp (L876-L885)
) to the MD5 hash of the callee. 3. In `pgo-instr-use` thin-lto prelink pipeline, MD5 hash of IRPGO names will be [annotated](fc715e4cd9/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp (L1707)
) as value profiles, and used to import indirect-call-prom candidates. If the annotated MD5 hash is computed from the new format while import uses the prior format, the callee cannot be imported. * `compiler-rt/test/profile/instrprof-thinlto-indirect-call-promotion.cpp` is added to have an end-to-end test. * `llvm/test/Transforms/PGOProfile/thinlto_indirect_call_promotion.ll` is updated to have better test coverage from another aspect (as runtime tests are more sensitive to the environment and may be skipped by some contributors)
32 lines
1.2 KiB
LLVM
32 lines
1.2 KiB
LLVM
; Test to check the callgraph in summary
|
|
; RUN: opt -module-summary %s -o %t.o
|
|
; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t.o
|
|
; RUN: llvm-bcanalyzer -dump %t.index.bc | FileCheck %s --check-prefix=COMBINED
|
|
|
|
; COMBINED: <GLOBALVAL_SUMMARY_BLOCK
|
|
; COMBINED-NEXT: <VERSION
|
|
; COMBINED-NEXT: <FLAGS
|
|
; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=686735765308251824/>
|
|
; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=4507502870619175775/>
|
|
; COMBINED-NEXT: <VALUE_GUID {{.*}} op1=-8118561185538785069/>
|
|
; COMBINED-DAG: <COMBINED_PROFILE{{ }}
|
|
; COMBINED-DAG: <COMBINED_ORIGINAL_NAME op0=-2012135647395072713/>
|
|
; COMBINED-DAG: <COMBINED_GLOBALVAR_INIT_REFS
|
|
; COMBINED-DAG: <COMBINED_ORIGINAL_NAME op0=6699318081062747564/>
|
|
; COMBINED-DAG: <COMBINED_ALIAS
|
|
; COMBINED-DAG: <COMBINED_ORIGINAL_NAME op0=-4170563161550796836/>
|
|
; COMBINED-NEXT: </GLOBALVAL_SUMMARY_BLOCK>
|
|
|
|
source_filename = "/path/to/source.c"
|
|
|
|
; 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"
|
|
|
|
@bar = internal global i32 0
|
|
@fooalias = internal alias void (...), bitcast (void ()* @foo to void (...)*)
|
|
|
|
define internal void @foo() {
|
|
ret void
|
|
}
|