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:
Chris Fallin
2022-04-14 10:28:21 -07:00
committed by GitHub
parent bfae6384aa
commit a0318f36f0
181 changed files with 16887 additions and 21587 deletions

View File

@@ -1,4 +1,4 @@
test compile
test compile precise-output
set unwind_info=false
target aarch64
@@ -75,19 +75,85 @@ block0(v0: f64):
return v62
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: stp d14, d15, [sp, #-16]!
; nextln: stp d12, d13, [sp, #-16]!
; nextln: stp d10, d11, [sp, #-16]!
; nextln: stp d8, d9, [sp, #-16]!
; check: ldp d8, d9, [sp], #16
; nextln: ldp d10, d11, [sp], #16
; nextln: ldp d12, d13, [sp], #16
; nextln: ldp d14, d15, [sp], #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; stp d14, d15, [sp, #-16]!
; stp d12, d13, [sp, #-16]!
; stp d10, d11, [sp, #-16]!
; stp d8, d9, [sp, #-16]!
; sub sp, sp, #16
; block0:
; fadd d4, d0, d0
; fadd d6, d0, d0
; str q6, [sp]
; fadd d6, d0, d0
; fadd d8, d0, d0
; fadd d10, d0, d0
; fadd d12, d0, d0
; fadd d14, d0, d0
; fadd d1, d0, d0
; fadd d3, d0, d0
; fadd d5, d0, d0
; fadd d7, d0, d0
; fadd d9, d0, d0
; fadd d11, d0, d0
; fadd d13, d0, d0
; fadd d16, d0, d0
; fadd d15, d0, d0
; fadd d20, d0, d0
; fadd d22, d0, d0
; fadd d24, d0, d0
; fadd d26, d0, d0
; fadd d28, d0, d0
; fadd d30, d0, d0
; fadd d17, d0, d0
; fadd d19, d0, d0
; fadd d21, d0, d0
; fadd d23, d0, d0
; fadd d25, d0, d0
; fadd d27, d0, d0
; fadd d29, d0, d0
; fadd d18, d0, d0
; fadd d2, d0, d0
; fadd d0, d0, d4
; ldr q4, [sp]
; fadd d6, d4, d6
; fadd d4, d8, d10
; fadd d10, d12, d14
; fadd d8, d1, d3
; fadd d14, d5, d7
; fadd d12, d9, d11
; fadd d3, d13, d16
; fadd d1, d15, d20
; fadd d7, d22, d24
; fadd d5, d26, d28
; fadd d11, d30, d17
; fadd d9, d19, d21
; fadd d15, d23, d25
; fadd d13, d27, d29
; fadd d2, d18, d2
; fadd d0, d0, d6
; fadd d6, d4, d10
; fadd d4, d8, d14
; fadd d10, d12, d3
; fadd d8, d1, d7
; fadd d11, d5, d11
; fadd d12, d9, d15
; fadd d14, d13, d2
; fadd d0, d0, d6
; fadd d2, d4, d10
; fadd d4, d8, d11
; fadd d6, d12, d14
; fadd d8, d0, d2
; fadd d10, d4, d6
; fadd d0, d8, d10
; add sp, sp, #16
; ldp d8, d9, [sp], #16
; ldp d10, d11, [sp], #16
; ldp d12, d13, [sp], #16
; ldp d14, d15, [sp], #16
; ldp fp, lr, [sp], #16
; ret
function %f2(i64) -> i64 {
block0(v0: i64):
@@ -135,14 +201,49 @@ block0(v0: i64):
return v36
}
; check: stp fp, lr, [sp, #-16]!
; nextln: mov fp, sp
; nextln: str x22, [sp, #-16]!
; nextln: stp x19, x20, [sp, #-16]!
; nextln: add x1, x0, x0
; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x19, x21, [sp, #-16]!
; block0:
; add x6, x0, x0
; add x7, x0, x6
; add x8, x0, x7
; add x9, x0, x8
; add x10, x0, x9
; add x11, x0, x10
; add x12, x0, x11
; add x13, x0, x12
; add x14, x0, x13
; add x15, x0, x14
; add x1, x0, x15
; add x2, x0, x1
; add x3, x0, x2
; add x4, x0, x3
; add x5, x0, x4
; add x28, x0, x5
; add x21, x0, x28
; add x19, x0, x21
; add x6, x0, x6
; add x7, x7, x8
; add x8, x9, x10
; add x9, x11, x12
; add x10, x13, x14
; add x11, x15, x1
; add x12, x2, x3
; add x13, x4, x5
; add x14, x28, x21
; add x6, x19, x6
; add x7, x7, x8
; add x8, x9, x10
; add x9, x11, x12
; add x10, x13, x14
; add x6, x6, x7
; add x7, x8, x9
; add x6, x10, x6
; add x0, x7, x6
; ldp x19, x21, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret
; check: add x0, x1, x0
; nextln: ldp x19, x20, [sp], #16
; nextln: ldr x22, [sp], #16
; nextln: ldp fp, lr, [sp], #16
; nextln: ret