mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-02 18:06:17 +00:00
PMB: Add an importing WPD pass to the start of the ThinLTO backend pipeline.
Differential Revision: https://reviews.llvm.org/D30008 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295260 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f9ea9a3e8b
commit
f24f18c0ea
@ -830,8 +830,22 @@ void PassManagerBuilder::populateThinLTOPassManager(
|
||||
if (VerifyInput)
|
||||
PM.add(createVerifierPass());
|
||||
|
||||
if (Summary)
|
||||
if (Summary) {
|
||||
// These passes import type identifier resolutions for whole-program
|
||||
// devirtualization and CFI. They must run early because other passes may
|
||||
// disturb the specific instruction patterns that these passes look for,
|
||||
// creating dependencies on resolutions that may not appear in the summary.
|
||||
//
|
||||
// For example, GVN may transform the pattern assume(type.test) appearing in
|
||||
// two basic blocks into assume(phi(type.test, type.test)), which would
|
||||
// transform a dependency on a WPD resolution into a dependency on a type
|
||||
// identifier resolution for CFI.
|
||||
//
|
||||
// Also, WPD has access to more precise information than ICP and can
|
||||
// devirtualize more effectively, so it should operate on the IR first.
|
||||
PM.add(createWholeProgramDevirtPass(PassSummaryAction::Import, Summary));
|
||||
PM.add(createLowerTypeTestsPass(PassSummaryAction::Import, Summary));
|
||||
}
|
||||
|
||||
populateModulePassManager(PM);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user