@@ -79,24 +79,18 @@ pub(crate) use macros::TryFromU32;
7979#[ derive( Clone ) ]
8080pub struct LlvmCodegenBackend ( ( ) ) ;
8181
82- struct TimeTraceProfiler {
83- enabled : bool ,
84- }
82+ struct TimeTraceProfiler { }
8583
8684impl TimeTraceProfiler {
87- fn new ( enabled : bool ) -> Self {
88- if enabled {
89- unsafe { llvm:: LLVMRustTimeTraceProfilerInitialize ( ) }
90- }
91- TimeTraceProfiler { enabled }
85+ fn new ( ) -> Self {
86+ unsafe { llvm:: LLVMRustTimeTraceProfilerInitialize ( ) }
87+ TimeTraceProfiler { }
9288 }
9389}
9490
9591impl Drop for TimeTraceProfiler {
9692 fn drop ( & mut self ) {
97- if self . enabled {
98- unsafe { llvm:: LLVMRustTimeTraceProfilerFinishThread ( ) }
99- }
93+ unsafe { llvm:: LLVMRustTimeTraceProfilerFinishThread ( ) }
10094 }
10195}
10296
@@ -122,54 +116,33 @@ impl ExtraBackendMethods for LlvmCodegenBackend {
122116 ) -> ( ModuleCodegen < ModuleLlvm > , u64 ) {
123117 base:: compile_codegen_unit ( tcx, cgu_name)
124118 }
125- fn target_machine_factory (
126- & self ,
127- sess : & Session ,
128- optlvl : OptLevel ,
129- target_features : & [ String ] ,
130- ) -> TargetMachineFactoryFn < Self > {
131- back:: write:: target_machine_factory ( sess, optlvl, target_features)
132- }
133-
134- fn spawn_named_thread < F , T > (
135- time_trace : bool ,
136- name : String ,
137- f : F ,
138- ) -> std:: io:: Result < std:: thread:: JoinHandle < T > >
139- where
140- F : FnOnce ( ) -> T ,
141- F : Send + ' static ,
142- T : Send + ' static ,
143- {
144- std:: thread:: Builder :: new ( ) . name ( name) . spawn ( move || {
145- let _profiler = TimeTraceProfiler :: new ( time_trace) ;
146- f ( )
147- } )
148- }
149119}
150120
151121impl WriteBackendMethods for LlvmCodegenBackend {
152122 type Module = ModuleLlvm ;
153123 type ModuleBuffer = back:: lto:: ModuleBuffer ;
154124 type TargetMachine = OwnedTargetMachine ;
155125 type ThinData = back:: lto:: ThinData ;
156- fn print_pass_timings ( & self ) {
157- let timings = llvm:: build_string ( |s| unsafe { llvm:: LLVMRustPrintPassTimings ( s) } ) . unwrap ( ) ;
158- print ! ( "{timings}" ) ;
126+ fn thread_profiler ( ) -> Box < dyn Any > {
127+ Box :: new ( TimeTraceProfiler :: new ( ) )
159128 }
160- fn print_statistics ( & self ) {
161- let stats = llvm:: build_string ( |s| unsafe { llvm:: LLVMRustPrintStatistics ( s) } ) . unwrap ( ) ;
162- print ! ( "{stats}" ) ;
129+ fn target_machine_factory (
130+ & self ,
131+ sess : & Session ,
132+ optlvl : OptLevel ,
133+ target_features : & [ String ] ,
134+ ) -> TargetMachineFactoryFn < Self > {
135+ back:: write:: target_machine_factory ( sess, optlvl, target_features)
163136 }
164- fn run_and_optimize_fat_lto (
137+ fn optimize_and_codegen_fat_lto (
165138 cgcx : & CodegenContext ,
166139 prof : & SelfProfilerRef ,
167140 shared_emitter : & SharedEmitter ,
168141 tm_factory : TargetMachineFactoryFn < LlvmCodegenBackend > ,
169142 exported_symbols_for_lto : & [ String ] ,
170143 each_linked_rlib_for_lto : & [ PathBuf ] ,
171144 modules : Vec < FatLtoInput < Self > > ,
172- ) -> ModuleCodegen < Self :: Module > {
145+ ) -> CompiledModule {
173146 let mut module = back:: lto:: run_fat (
174147 cgcx,
175148 prof,
@@ -184,7 +157,7 @@ impl WriteBackendMethods for LlvmCodegenBackend {
184157 let dcx = dcx. handle ( ) ;
185158 back:: lto:: run_pass_manager ( cgcx, prof, dcx, & mut module, false ) ;
186159
187- module
160+ back :: write :: codegen ( cgcx , prof , shared_emitter , module, & cgcx . module_config )
188161 }
189162 fn run_thin_lto (
190163 cgcx : & CodegenContext ,
@@ -214,14 +187,14 @@ impl WriteBackendMethods for LlvmCodegenBackend {
214187 ) {
215188 back:: write:: optimize ( cgcx, prof, shared_emitter, module, config)
216189 }
217- fn optimize_thin (
190+ fn optimize_and_codegen_thin (
218191 cgcx : & CodegenContext ,
219192 prof : & SelfProfilerRef ,
220193 shared_emitter : & SharedEmitter ,
221194 tm_factory : TargetMachineFactoryFn < LlvmCodegenBackend > ,
222195 thin : ThinModule < Self > ,
223- ) -> ModuleCodegen < Self :: Module > {
224- back:: lto:: optimize_thin_module ( cgcx, prof, shared_emitter, tm_factory, thin)
196+ ) -> CompiledModule {
197+ back:: lto:: optimize_and_codegen_thin_module ( cgcx, prof, shared_emitter, tm_factory, thin)
225198 }
226199 fn codegen (
227200 cgcx : & CodegenContext ,
@@ -389,6 +362,16 @@ impl CodegenBackend for LlvmCodegenBackend {
389362 ( compiled_modules, work_products)
390363 }
391364
365+ fn print_pass_timings ( & self ) {
366+ let timings = llvm:: build_string ( |s| unsafe { llvm:: LLVMRustPrintPassTimings ( s) } ) . unwrap ( ) ;
367+ print ! ( "{timings}" ) ;
368+ }
369+
370+ fn print_statistics ( & self ) {
371+ let stats = llvm:: build_string ( |s| unsafe { llvm:: LLVMRustPrintStatistics ( s) } ) . unwrap ( ) ;
372+ print ! ( "{stats}" ) ;
373+ }
374+
392375 fn link (
393376 & self ,
394377 sess : & Session ,
0 commit comments