Files
wasmtime/cranelift/filetests/filetests/isa/x64/struct-arg.clif
Chris Fallin a0318f36f0 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
```
2022-04-14 10:28:21 -07:00

152 lines
3.1 KiB
Plaintext

test compile precise-output
target x86_64
function u0:0(i64 sarg(64)) -> i8 system_v {
block0(v0: i64):
v1 = load.i8 v0
return v1
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; lea 16(%rbp), %rsi
; movzbq 0(%rsi), %rax
; movq %rbp, %rsp
; popq %rbp
; ret
function u0:1(i64 sarg(64), i64) -> i8 system_v {
block0(v0: i64, v1: i64):
v2 = load.i8 v1
v3 = load.i8 v0
v4 = iadd.i8 v2, v3
return v4
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; lea 16(%rbp), %rsi
; movzbq 0(%rdi), %rax
; movzbq 0(%rsi), %r11
; addl %eax, %r11d, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function u0:2(i64) -> i8 system_v {
fn1 = colocated u0:0(i64 sarg(64)) -> i8 system_v
block0(v0: i64):
v1 = call fn1(v0)
return v1
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %r8
; subq %rsp, $64, %rsp
; virtual_sp_offset_adjust 64
; lea 0(%rsp), %rdi
; movq %r8, %rsi
; movl $64, %edx
; load_ext_name %Memcpy+0, %rcx
; call *%rcx
; call User { namespace: 0, index: 0 }
; addq %rsp, $64, %rsp
; virtual_sp_offset_adjust -64
; movq %rbp, %rsp
; popq %rbp
; ret
function u0:3(i64, i64) -> i8 system_v {
fn1 = colocated u0:0(i64, i64 sarg(64)) -> i8 system_v
block0(v0: i64, v1: i64):
v2 = call fn1(v0, v1)
return v2
}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %r12, 0(%rsp)
; block0:
; movq %rdi, %r12
; subq %rsp, $64, %rsp
; virtual_sp_offset_adjust 64
; lea 0(%rsp), %rdi
; movl $64, %edx
; load_ext_name %Memcpy+0, %rcx
; call *%rcx
; movq %r12, %rdi
; call User { namespace: 0, index: 0 }
; addq %rsp, $64, %rsp
; virtual_sp_offset_adjust -64
; movq 0(%rsp), %r12
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret
function u0:4(i64 sarg(128), i64 sarg(64)) -> i8 system_v {
block0(v0: i64, v1: i64):
v2 = load.i8 v0
v3 = load.i8 v1
v4 = iadd.i8 v2, v3
return v4
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; lea 16(%rbp), %rsi
; lea 144(%rbp), %rdi
; movzbq 0(%rsi), %rax
; movzbq 0(%rdi), %r11
; addl %eax, %r11d, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
function u0:5(i64, i64, i64) -> i8 system_v {
fn1 = colocated u0:0(i64, i64 sarg(128), i64 sarg(64)) -> i8 system_v
block0(v0: i64, v1: i64, v2: i64):
v3 = call fn1(v0, v1, v2)
return v3
}
; pushq %rbp
; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %rbx, 0(%rsp)
; movq %r14, 8(%rsp)
; block0:
; movq %rdi, %r14
; movq %rdx, %rbx
; subq %rsp, $192, %rsp
; virtual_sp_offset_adjust 192
; lea 0(%rsp), %rdi
; movl $128, %edx
; load_ext_name %Memcpy+0, %rcx
; call *%rcx
; lea 128(%rsp), %rdi
; movq %rbx, %rsi
; movl $64, %edx
; load_ext_name %Memcpy+0, %rcx
; call *%rcx
; movq %r14, %rdi
; call User { namespace: 0, index: 0 }
; addq %rsp, $192, %rsp
; virtual_sp_offset_adjust -192
; movq 0(%rsp), %rbx
; movq 8(%rsp), %r14
; addq %rsp, $16, %rsp
; movq %rbp, %rsp
; popq %rbp
; ret