Skip to content

Commit 6eae76c

Browse files
committed
revert OnceLock change
1 parent 4436bbf commit 6eae76c

File tree

9 files changed

+35
-20
lines changed

9 files changed

+35
-20
lines changed

.github/workflows/main.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,6 @@ jobs:
551551
cargo check -p wasmtime --no-default-features --features runtime,gc,component-model,async,debug-builtins &&
552552
cargo check -p cranelift-control --no-default-features &&
553553
cargo check -p cranelift-assembler-x64 --lib &&
554-
cargo check -p cranelift-codegen --no-default-features -F x86,arm64 &&
555554
cargo check -p pulley-interpreter --features encode,decode,disas,interp &&
556555
cargo check -p wasmtime-wasi-io --no-default-features
557556
# Use `cross` for illumos to have a C compiler/linker available.

cranelift/codegen/src/isa/aarch64/abi.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use alloc::boxed::Box;
1717
use alloc::vec::Vec;
1818
use regalloc2::{MachineEnv, PReg, PRegSet};
1919
use smallvec::{SmallVec, smallvec};
20+
use std::sync::OnceLock;
2021

2122
// We use a generic implementation that factors out AArch64 and x64 ABI commonalities, because
2223
// these ABIs are very similar.
@@ -1086,11 +1087,13 @@ impl ABIMachineSpec for AArch64MachineDeps {
10861087
}
10871088
}
10881089

1089-
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 {
10901091
if flags.enable_pinned_reg() {
1091-
create_reg_env(true)
1092+
static MACHINE_ENV: OnceLock<MachineEnv> = OnceLock::new();
1093+
MACHINE_ENV.get_or_init(|| create_reg_env(true))
10921094
} else {
1093-
create_reg_env(false)
1095+
static MACHINE_ENV: OnceLock<MachineEnv> = OnceLock::new();
1096+
MACHINE_ENV.get_or_init(|| create_reg_env(false))
10941097
}
10951098
}
10961099

cranelift/codegen/src/isa/pulley_shared/abi.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use core::marker::PhantomData;
1515
use cranelift_bitset::ScalarBitSet;
1616
use regalloc2::{MachineEnv, PReg, PRegSet};
1717
use smallvec::{SmallVec, smallvec};
18+
use std::sync::OnceLock;
1819

1920
/// Support for the Pulley ABI from the callee side (within a function body).
2021
pub(crate) type PulleyCallee<P> = Callee<PulleyMachineDeps<P>>;
@@ -473,8 +474,9 @@ where
473474
}
474475
}
475476

476-
fn get_machine_env(_flags: &settings::Flags, _call_conv: isa::CallConv) -> MachineEnv {
477-
create_reg_environment()
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)
478480
}
479481

480482
fn get_regs_clobbered_by_call(

cranelift/codegen/src/isa/riscv64/abi.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use regalloc2::{MachineEnv, PReg, PRegSet};
2121

2222
use alloc::borrow::ToOwned;
2323
use smallvec::{SmallVec, smallvec};
24+
use std::sync::OnceLock;
2425

2526
/// Support for the Riscv64 ABI from the callee side (within a function body).
2627
pub(crate) type Riscv64Callee = Callee<Riscv64MachineDeps>;
@@ -611,8 +612,9 @@ impl ABIMachineSpec for Riscv64MachineDeps {
611612
}
612613
}
613614

614-
fn get_machine_env(_flags: &settings::Flags, _call_conv: isa::CallConv) -> MachineEnv {
615-
create_reg_environment()
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)
616618
}
617619

618620
fn get_regs_clobbered_by_call(

cranelift/codegen/src/isa/s390x/abi.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ use alloc::borrow::ToOwned;
148148
use alloc::vec::Vec;
149149
use regalloc2::{MachineEnv, PRegSet};
150150
use smallvec::{SmallVec, smallvec};
151+
use std::sync::OnceLock;
151152

152153
// We use a generic implementation that factors out ABI commonalities.
153154

@@ -903,10 +904,16 @@ impl ABIMachineSpec for S390xMachineDeps {
903904
}
904905
}
905906

906-
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 {
907908
match call_conv {
908-
isa::CallConv::Tail => tail_create_machine_env(),
909-
_ => sysv_create_machine_env(),
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+
}
910917
}
911918
}
912919

cranelift/codegen/src/isa/x64/abi.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use args::*;
1616
use cranelift_assembler_x64 as asm;
1717
use regalloc2::{MachineEnv, PReg, PRegSet};
1818
use smallvec::{SmallVec, smallvec};
19+
use std::sync::OnceLock;
1920

2021
/// Support for the x64 ABI from the callee side (within a function body).
2122
pub(crate) type X64Callee = Callee<X64ABIMachineSpec>;
@@ -872,11 +873,13 @@ impl ABIMachineSpec for X64ABIMachineSpec {
872873
}
873874
}
874875

875-
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 {
876877
if flags.enable_pinned_reg() {
877-
create_reg_env_systemv(true)
878+
static MACHINE_ENV: OnceLock<MachineEnv> = OnceLock::new();
879+
MACHINE_ENV.get_or_init(|| create_reg_env_systemv(true))
878880
} else {
879-
create_reg_env_systemv(false)
881+
static MACHINE_ENV: OnceLock<MachineEnv> = OnceLock::new();
882+
MACHINE_ENV.get_or_init(|| create_reg_env_systemv(false))
880883
}
881884
}
882885

cranelift/codegen/src/machinst/abi.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ pub trait ABIMachineSpec {
574574
) -> u32;
575575

576576
/// Get the ABI-dependent MachineEnv for managing register allocation.
577-
fn get_machine_env(flags: &settings::Flags, call_conv: isa::CallConv) -> MachineEnv;
577+
fn get_machine_env(flags: &settings::Flags, call_conv: isa::CallConv) -> &MachineEnv;
578578

579579
/// Get all caller-save registers, that is, registers that we expect
580580
/// not to be saved across a call to a callee with the given ABI.
@@ -1539,7 +1539,7 @@ impl<M: ABIMachineSpec> Callee<M> {
15391539
}
15401540

15411541
/// Get the ABI-dependent MachineEnv for managing register allocation.
1542-
pub fn machine_env(&self) -> MachineEnv {
1542+
pub fn machine_env(&self) -> &MachineEnv {
15431543
M::get_machine_env(&self.flags, self.call_conv)
15441544
}
15451545

cranelift/codegen/src/machinst/compile.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff 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:?}\nError: {err:?}\nCLIF for error:\n{f:?}",
@@ -82,8 +82,7 @@ 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 machine_env = vcode.abi.machine_env();
86-
let mut checker = regalloc2::checker::Checker::new(&vcode, &machine_env);
85+
let mut checker = regalloc2::checker::Checker::new(&vcode, &vcode.abi.machine_env());
8786
checker.prepare(&regalloc_result);
8887
checker
8988
.run()

cranelift/codegen/src/machinst/vcode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ impl<I: VCodeInst> VCodeBuilder<I> {
515515
}
516516

517517
fn collect_operands(&mut self, vregs: &VRegAllocator<I>) {
518-
let allocatable = PRegSet::from(&self.vcode.abi.machine_env());
518+
let allocatable = PRegSet::from(self.vcode.abi.machine_env());
519519
for (i, insn) in self.vcode.insts.iter_mut().enumerate() {
520520
// Push operands from the instruction onto the operand list.
521521
//

0 commit comments

Comments
 (0)