1 use crate::back
::lto
::{LtoModuleCodegen, SerializedModule, ThinModule}
;
2 use crate::back
::write
::{CodegenContext, FatLTOInput, ModuleConfig}
;
3 use crate::{CompiledModule, ModuleCodegen}
;
5 use rustc_errors
::{FatalError, Handler}
;
6 use rustc_middle
::dep_graph
::WorkProduct
;
8 pub trait WriteBackendMethods
: '
static + Sized
+ Clone
{
9 type Module
: Send
+ Sync
;
11 type TargetMachineError
;
12 type ModuleBuffer
: ModuleBufferMethods
;
13 type ThinData
: Send
+ Sync
;
14 type ThinBuffer
: ThinBufferMethods
;
16 /// Merge all modules into main_module and returning it
18 cgcx
: &CodegenContext
<Self>,
19 diag_handler
: &Handler
,
20 modules
: Vec
<ModuleCodegen
<Self::Module
>>,
21 ) -> Result
<ModuleCodegen
<Self::Module
>, FatalError
>;
22 /// Performs fat LTO by merging all modules into a single one and returning it
23 /// for further optimization.
25 cgcx
: &CodegenContext
<Self>,
26 modules
: Vec
<FatLTOInput
<Self>>,
27 cached_modules
: Vec
<(SerializedModule
<Self::ModuleBuffer
>, WorkProduct
)>,
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.
33 cgcx
: &CodegenContext
<Self>,
34 modules
: Vec
<(String
, Self::ThinBuffer
)>,
35 cached_modules
: Vec
<(SerializedModule
<Self::ModuleBuffer
>, WorkProduct
)>,
36 ) -> Result
<(Vec
<LtoModuleCodegen
<Self>>, Vec
<WorkProduct
>), FatalError
>;
37 fn print_pass_timings(&self);
39 cgcx
: &CodegenContext
<Self>,
40 diag_handler
: &Handler
,
41 module
: &ModuleCodegen
<Self::Module
>,
42 config
: &ModuleConfig
,
43 ) -> Result
<(), FatalError
>;
45 cgcx
: &CodegenContext
<Self>,
46 llmod
: &mut ModuleCodegen
<Self::Module
>,
47 ) -> Result
<(), FatalError
>;
48 unsafe fn optimize_thin(
49 cgcx
: &CodegenContext
<Self>,
50 thin
: ThinModule
<Self>,
51 ) -> Result
<ModuleCodegen
<Self::Module
>, FatalError
>;
53 cgcx
: &CodegenContext
<Self>,
54 diag_handler
: &Handler
,
55 module
: ModuleCodegen
<Self::Module
>,
56 config
: &ModuleConfig
,
57 ) -> Result
<CompiledModule
, FatalError
>;
58 fn prepare_thin(module
: ModuleCodegen
<Self::Module
>) -> (String
, Self::ThinBuffer
);
59 fn serialize_module(module
: ModuleCodegen
<Self::Module
>) -> (String
, Self::ModuleBuffer
);
62 pub trait ThinBufferMethods
: Send
+ Sync
{
63 fn data(&self) -> &[u8];
66 pub trait ModuleBufferMethods
: Send
+ Sync
{
67 fn data(&self) -> &[u8];