File tree Expand file tree Collapse file tree 8 files changed +19
-31
lines changed
Expand file tree Collapse file tree 8 files changed +19
-31
lines changed Original file line number Diff line number Diff line change @@ -1087,13 +1087,11 @@ impl ABIMachineSpec for AArch64MachineDeps {
10871087 }
10881088 }
10891089
1090- fn get_machine_env ( flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> & MachineEnv {
1090+ fn get_machine_env ( flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> MachineEnv {
10911091 if flags. enable_pinned_reg ( ) {
1092- static MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
1093- MACHINE_ENV . get_or_init ( || create_reg_env ( true ) )
1092+ create_reg_env ( true )
10941093 } else {
1095- static MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
1096- MACHINE_ENV . get_or_init ( || create_reg_env ( false ) )
1094+ create_reg_env ( false )
10971095 }
10981096 }
10991097
Original file line number Diff line number Diff line change @@ -474,9 +474,8 @@ where
474474 }
475475 }
476476
477- fn get_machine_env ( _flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> & MachineEnv {
478- static MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
479- MACHINE_ENV . get_or_init ( create_reg_environment)
477+ fn get_machine_env ( _flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> MachineEnv {
478+ create_reg_environment ( )
480479 }
481480
482481 fn get_regs_clobbered_by_call (
Original file line number Diff line number Diff line change @@ -612,9 +612,8 @@ impl ABIMachineSpec for Riscv64MachineDeps {
612612 }
613613 }
614614
615- fn get_machine_env ( _flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> & MachineEnv {
616- static MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
617- MACHINE_ENV . get_or_init ( create_reg_environment)
615+ fn get_machine_env ( _flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> MachineEnv {
616+ create_reg_environment ( )
618617 }
619618
620619 fn get_regs_clobbered_by_call (
Original file line number Diff line number Diff line change @@ -904,16 +904,10 @@ impl ABIMachineSpec for S390xMachineDeps {
904904 }
905905 }
906906
907- fn get_machine_env ( _flags : & settings:: Flags , call_conv : isa:: CallConv ) -> & MachineEnv {
907+ fn get_machine_env ( _flags : & settings:: Flags , call_conv : isa:: CallConv ) -> MachineEnv {
908908 match call_conv {
909- isa:: CallConv :: Tail => {
910- static TAIL_MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
911- TAIL_MACHINE_ENV . get_or_init ( tail_create_machine_env)
912- }
913- _ => {
914- static SYSV_MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
915- SYSV_MACHINE_ENV . get_or_init ( sysv_create_machine_env)
916- }
909+ isa:: CallConv :: Tail => tail_create_machine_env ( ) ,
910+ _ => sysv_create_machine_env ( ) ,
917911 }
918912 }
919913
Original file line number Diff line number Diff line change @@ -17,7 +17,6 @@ use args::*;
1717use cranelift_assembler_x64 as asm;
1818use regalloc2:: { MachineEnv , PReg , PRegSet } ;
1919use smallvec:: { SmallVec , smallvec} ;
20- use std:: sync:: OnceLock ;
2120
2221/// Support for the x64 ABI from the callee side (within a function body).
2322pub ( crate ) type X64Callee = Callee < X64ABIMachineSpec > ;
@@ -874,13 +873,11 @@ impl ABIMachineSpec for X64ABIMachineSpec {
874873 }
875874 }
876875
877- fn get_machine_env ( flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> & MachineEnv {
876+ fn get_machine_env ( flags : & settings:: Flags , _call_conv : isa:: CallConv ) -> MachineEnv {
878877 if flags. enable_pinned_reg ( ) {
879- static MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
880- MACHINE_ENV . get_or_init ( || create_reg_env_systemv ( true ) )
878+ create_reg_env_systemv ( true )
881879 } else {
882- static MACHINE_ENV : OnceLock < MachineEnv > = OnceLock :: new ( ) ;
883- MACHINE_ENV . get_or_init ( || create_reg_env_systemv ( false ) )
880+ create_reg_env_systemv ( false )
884881 }
885882 }
886883
Original file line number Diff line number Diff line change @@ -575,7 +575,7 @@ pub trait ABIMachineSpec {
575575 ) -> u32 ;
576576
577577 /// Get the ABI-dependent MachineEnv for managing register allocation.
578- fn get_machine_env ( flags : & settings:: Flags , call_conv : isa:: CallConv ) -> & MachineEnv ;
578+ fn get_machine_env ( flags : & settings:: Flags , call_conv : isa:: CallConv ) -> MachineEnv ;
579579
580580 /// Get all caller-save registers, that is, registers that we expect
581581 /// not to be saved across a call to a callee with the given ABI.
@@ -1540,7 +1540,7 @@ impl<M: ABIMachineSpec> Callee<M> {
15401540 }
15411541
15421542 /// Get the ABI-dependent MachineEnv for managing register allocation.
1543- pub fn machine_env ( & self ) -> & MachineEnv {
1543+ pub fn machine_env ( & self ) -> MachineEnv {
15441544 M :: get_machine_env ( & self . flags , self . call_conv )
15451545 }
15461546
Original file line number Diff line number Diff line change @@ -69,7 +69,7 @@ pub fn compile<B: LowerBackend + TargetIsa>(
6969 RegallocAlgorithm :: SinglePass => Algorithm :: Fastalloc ,
7070 } ;
7171
72- regalloc2:: run ( & vcode, vcode. abi . machine_env ( ) , & options)
72+ regalloc2:: run ( & vcode, & vcode. abi . machine_env ( ) , & options)
7373 . map_err ( |err| {
7474 log:: error!(
7575 "Register allocation error for vcode\n {vcode:?}\n Error: {err:?}\n CLIF for error:\n {f:?}" ,
@@ -82,7 +82,8 @@ pub fn compile<B: LowerBackend + TargetIsa>(
8282 // Run the regalloc checker, if requested.
8383 if b. flags ( ) . regalloc_checker ( ) {
8484 let _tt = timing:: regalloc_checker ( ) ;
85- let mut checker = regalloc2:: checker:: Checker :: new ( & vcode, vcode. abi . machine_env ( ) ) ;
85+ let machine_env = vcode. abi . machine_env ( ) ;
86+ let mut checker = regalloc2:: checker:: Checker :: new ( & vcode, & machine_env) ;
8687 checker. prepare ( & regalloc_result) ;
8788 checker
8889 . run ( )
Original file line number Diff line number Diff line change @@ -516,7 +516,7 @@ impl<I: VCodeInst> VCodeBuilder<I> {
516516 }
517517
518518 fn collect_operands ( & mut self , vregs : & VRegAllocator < I > ) {
519- let allocatable = PRegSet :: from ( self . vcode . abi . machine_env ( ) ) ;
519+ let allocatable = PRegSet :: from ( & self . vcode . abi . machine_env ( ) ) ;
520520 for ( i, insn) in self . vcode . insts . iter_mut ( ) . enumerate ( ) {
521521 // Push operands from the instruction onto the operand list.
522522 //
You can’t perform that action at this time.
0 commit comments