Switch Cranelift over to regalloc2. (#3989)
This PR switches Cranelift over to the new register allocator, regalloc2. See [this document](https://gist.github.com/cfallin/08553421a91f150254fe878f67301801) for a summary of the design changes. This switchover has implications for core VCode/MachInst types and the lowering pass. Overall, this change brings improvements to both compile time and speed of generated code (runtime), as reported in #3942: ``` Benchmark Compilation (wallclock) Execution (wallclock) blake3-scalar 25% faster 28% faster blake3-simd no diff no diff meshoptimizer 19% faster 17% faster pulldown-cmark 17% faster no diff bz2 15% faster no diff SpiderMonkey, 21% faster 2% faster fib(30) clang.wasm 42% faster N/A ```
This commit is contained in:
@@ -17,9 +17,8 @@ use crate::{
|
||||
binemit::CodeOffset,
|
||||
ir::{
|
||||
immediates::*, types::*, ExternalName, Inst, InstructionData, MemFlags, TrapCode, Value,
|
||||
ValueLabel, ValueList,
|
||||
ValueList,
|
||||
},
|
||||
isa::aarch64::inst::aarch64_map_regs,
|
||||
isa::aarch64::inst::args::{ShiftOp, ShiftOpShiftImm},
|
||||
isa::unwind::UnwindInst,
|
||||
machinst::{ty_bits, InsnOutput, LowerCtx},
|
||||
@@ -45,15 +44,9 @@ pub(crate) fn lower<C>(
|
||||
where
|
||||
C: LowerCtx<I = MInst>,
|
||||
{
|
||||
lower_common(
|
||||
lower_ctx,
|
||||
flags,
|
||||
isa_flags,
|
||||
outputs,
|
||||
inst,
|
||||
|cx, insn| generated_code::constructor_lower(cx, insn),
|
||||
aarch64_map_regs,
|
||||
)
|
||||
lower_common(lower_ctx, flags, isa_flags, outputs, inst, |cx, insn| {
|
||||
generated_code::constructor_lower(cx, insn)
|
||||
})
|
||||
}
|
||||
|
||||
pub struct ExtendedValue {
|
||||
@@ -200,11 +193,7 @@ where
|
||||
}
|
||||
|
||||
fn emit(&mut self, inst: &MInst) -> Unit {
|
||||
self.emitted_insts.push((inst.clone(), false));
|
||||
}
|
||||
|
||||
fn emit_safepoint(&mut self, inst: &MInst) -> Unit {
|
||||
self.emitted_insts.push((inst.clone(), true));
|
||||
self.lower_ctx.emit(inst.clone());
|
||||
}
|
||||
|
||||
fn cond_br_zero(&mut self, reg: Reg) -> CondBrKind {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
src/clif.isle 443b34b797fc8ace
|
||||
src/prelude.isle c0751050a11e2686
|
||||
src/isa/aarch64/inst.isle 19ccefb6a496d392
|
||||
src/prelude.isle afd037c4d91c875c
|
||||
src/isa/aarch64/inst.isle 544b7126192140d5
|
||||
src/isa/aarch64/lower.isle d88b62dd6b40622
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user