]>
Commit | Line | Data |
---|---|---|
9fa01778 | 1 | use crate::back::lto::{LtoModuleCodegen, SerializedModule, ThinModule}; |
dfeec247 | 2 | use crate::back::write::{CodegenContext, FatLTOInput, ModuleConfig}; |
9fa01778 | 3 | use crate::{CompiledModule, ModuleCodegen}; |
a1dfa0c6 | 4 | |
a1dfa0c6 | 5 | use rustc_errors::{FatalError, Handler}; |
ba9703b0 | 6 | use rustc_middle::dep_graph::WorkProduct; |
a1dfa0c6 XL |
7 | |
8 | pub trait WriteBackendMethods: 'static + Sized + Clone { | |
9 | type Module: Send + Sync; | |
10 | type TargetMachine; | |
11 | type ModuleBuffer: ModuleBufferMethods; | |
12 | type Context: ?Sized; | |
13 | type ThinData: Send + Sync; | |
14 | type ThinBuffer: ThinBufferMethods; | |
15 | ||
1b1a35ee XL |
16 | /// Merge all modules into main_module and returning it |
17 | fn run_link( | |
18 | cgcx: &CodegenContext<Self>, | |
19 | diag_handler: &Handler, | |
20 | modules: Vec<ModuleCodegen<Self::Module>>, | |
21 | ) -> Result<ModuleCodegen<Self::Module>, FatalError>; | |
0731742a XL |
22 | /// Performs fat LTO by merging all modules into a single one and returning it |
23 | /// for further optimization. | |
24 | fn run_fat_lto( | |
a1dfa0c6 | 25 | cgcx: &CodegenContext<Self>, |
9fa01778 XL |
26 | modules: Vec<FatLTOInput<Self>>, |
27 | cached_modules: Vec<(SerializedModule<Self::ModuleBuffer>, WorkProduct)>, | |
0731742a XL |
28 | ) -> Result<LtoModuleCodegen<Self>, FatalError>; |
29 | /// Performs thin LTO by performing necessary global analysis and returning two | |
30 | /// lists, one of the modules that need optimization and another for modules that | |
31 | /// can simply be copied over from the incr. comp. cache. | |
32 | fn run_thin_lto( | |
33 | cgcx: &CodegenContext<Self>, | |
34 | modules: Vec<(String, Self::ThinBuffer)>, | |
a1dfa0c6 | 35 | cached_modules: Vec<(SerializedModule<Self::ModuleBuffer>, WorkProduct)>, |
a1dfa0c6 XL |
36 | ) -> Result<(Vec<LtoModuleCodegen<Self>>, Vec<WorkProduct>), FatalError>; |
37 | fn print_pass_timings(&self); | |
38 | unsafe fn optimize( | |
39 | cgcx: &CodegenContext<Self>, | |
40 | diag_handler: &Handler, | |
41 | module: &ModuleCodegen<Self::Module>, | |
42 | config: &ModuleConfig, | |
a1dfa0c6 XL |
43 | ) -> Result<(), FatalError>; |
44 | unsafe fn optimize_thin( | |
45 | cgcx: &CodegenContext<Self>, | |
46 | thin: &mut ThinModule<Self>, | |
a1dfa0c6 XL |
47 | ) -> Result<ModuleCodegen<Self::Module>, FatalError>; |
48 | unsafe fn codegen( | |
49 | cgcx: &CodegenContext<Self>, | |
50 | diag_handler: &Handler, | |
51 | module: ModuleCodegen<Self::Module>, | |
52 | config: &ModuleConfig, | |
a1dfa0c6 | 53 | ) -> Result<CompiledModule, FatalError>; |
dfeec247 XL |
54 | fn prepare_thin(module: ModuleCodegen<Self::Module>) -> (String, Self::ThinBuffer); |
55 | fn serialize_module(module: ModuleCodegen<Self::Module>) -> (String, Self::ModuleBuffer); | |
a1dfa0c6 XL |
56 | fn run_lto_pass_manager( |
57 | cgcx: &CodegenContext<Self>, | |
58 | llmod: &ModuleCodegen<Self::Module>, | |
59 | config: &ModuleConfig, | |
60 | thin: bool, | |
17df50a5 | 61 | ) -> Result<(), FatalError>; |
a1dfa0c6 XL |
62 | } |
63 | ||
64 | pub trait ThinBufferMethods: Send + Sync { | |
65 | fn data(&self) -> &[u8]; | |
66 | } | |
67 | ||
68 | pub trait ModuleBufferMethods: Send + Sync { | |
69 | fn data(&self) -> &[u8]; | |
70 | } |