2051 lines
146 KiB
Plaintext
2051 lines
146 KiB
Plaintext
Compiling regalloc2 v0.6.1 (/home/tatsu/projects/regalloc/regalloc2)
|
|
warning: unused import: `println`
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:6:29
|
|
|
|
|
6 | use std::{convert::TryFrom, println};
|
|
| ^^^^^^^
|
|
|
|
|
= note: `#[warn(unused_imports)]` on by default
|
|
|
|
warning: unused imports: `Operand`, `cfg::CFGInfo`
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:10:5
|
|
|
|
|
10 | cfg::CFGInfo, Allocation, Block, Edit, Function, Inst, MachineEnv, Operand, OperandConstraint,
|
|
| ^^^^^^^^^^^^ ^^^^^^^
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:562:33
|
|
|
|
|
561 | ... panic!("reftype has fixed use when its required to be on stack");
|
|
| ---------------------------------------------------------------- any code following this expression is unreachable
|
|
562 | ... return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
|
= note: `#[warn(unreachable_code)]` on by default
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:570:37
|
|
|
|
|
569 | ... panic!("fixed reg late use would overwrite another fixed reg use/early write");
|
|
| ------------------------------------------------------------------------------ any code following this expression is unreachable
|
|
570 | ... return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:579:37
|
|
|
|
|
578 | ... panic!("fixed late use would be clobbered");
|
|
| ------------------------------------------- any code following this expression is unreachable
|
|
579 | ... return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:593:37
|
|
|
|
|
592 | ... panic!("fixed late def would overwrite late use/early def");
|
|
| ----------------------------------------------------------- any code following this expression is unreachable
|
|
593 | ... return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:601:37
|
|
|
|
|
600 | ... panic!("early def shares reg or is clobbered");
|
|
| ---------------------------------------------- any code following this expression is unreachable
|
|
601 | ... return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:727:33
|
|
|
|
|
726 | ... panic!("reftype required to be in reg at safepoint");
|
|
| ---------------------------------------------------- any code following this expression is unreachable
|
|
727 | ... return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:753:21
|
|
|
|
|
752 | panic!("Out of registers: {:?}", regs_allocated);
|
|
| ------------------------------------------------ any code following this expression is unreachable
|
|
753 | return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
warning: unreachable statement
|
|
--> /home/tatsu/projects/regalloc/regalloc2/src/ion/fast_alloc.rs:807:21
|
|
|
|
|
806 | panic!("out of registers");
|
|
| -------------------------- any code following this expression is unreachable
|
|
807 | return Err(RegAllocError::TooManyLiveRegs);
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
|
|
|
|
Compiling cranelift-codegen v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/codegen)
|
|
warning: `regalloc2` (lib) generated 10 warnings
|
|
warning: unused variable: `want_disasm`
|
|
--> /home/tatsu/projects/regalloc/wasmtime/cranelift/codegen/src/machinst/vcode.rs:765:9
|
|
|
|
|
765 | want_disasm: bool,
|
|
| ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_want_disasm`
|
|
|
|
|
= note: `#[warn(unused_variables)]` on by default
|
|
|
|
Compiling cranelift-module v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/module)
|
|
Compiling cranelift-native v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/native)
|
|
Compiling cranelift-frontend v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/frontend)
|
|
Compiling cranelift-reader v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/reader)
|
|
Compiling cranelift-jit v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/jit)
|
|
Compiling cranelift v0.96.0 (/home/tatsu/projects/regalloc/wasmtime/cranelift/umbrella)
|
|
warning: `cranelift-codegen` (lib) generated 1 warning
|
|
Compiling cranelift_test v0.1.0 (/home/tatsu/projects/regalloc/cranelift_test)
|
|
warning: unused imports: `BlockCall`, `FuncRef`, `InstructionData`, `Opcode`, `ValueList`, `function`
|
|
--> src/main.rs:1:30
|
|
|
|
|
1 | use cranelift::codegen::ir::{function, BlockCall, FuncRef, InstructionData, Opcode, ValueList};
|
|
| ^^^^^^^^ ^^^^^^^^^ ^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^^
|
|
|
|
|
= note: `#[warn(unused_imports)]` on by default
|
|
|
|
warning: unused import: `cranelift::codegen::isa`
|
|
--> src/main.rs:2:5
|
|
|
|
|
2 | use cranelift::codegen::isa;
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
warning: unused import: `cranelift_frontend::FunctionBuilderContext`
|
|
--> src/main.rs:5:5
|
|
|
|
|
5 | use cranelift_frontend::FunctionBuilderContext;
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
warning: unused imports: `DataDescription`, `FuncId`
|
|
--> src/main.rs:7:24
|
|
|
|
|
7 | use cranelift_module::{DataDescription, FuncId, Linkage, Module};
|
|
| ^^^^^^^^^^^^^^^ ^^^^^^
|
|
|
|
warning: unused import: `cranelift::prelude`
|
|
--> src/main.rs:4:5
|
|
|
|
|
4 | use cranelift::prelude::*;
|
|
| ^^^^^^^^^^^^^^^^^^
|
|
|
|
warning: `cranelift_test` (bin "cranelift_test") generated 5 warnings
|
|
Finished dev [unoptimized + debuginfo] target(s) in 5.08s
|
|
Running `target/debug/cranelift_test tests/fibonacci.clif`
|
|
DEBUG cranelift_codegen::timing > timing: Starting Parsing textual Cranelift IR, (during <no pass>)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Parsing textual Cranelift IR, (during Parsing textual Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Parsing textual Cranelift IR
|
|
DEBUG cranelift_codegen::timing > timing: Ending Parsing textual Cranelift IR
|
|
INFO cranelift_jit::backend > defining function funcid0: function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v1 = icmp_imm ule v0, 2
|
|
v2 = iconst.i32 1
|
|
brif v1, block3(v2), block1(v0, v2) ; v2 = 1, v2 = 1
|
|
|
|
block1(v4: i32, v5: i32):
|
|
v6 = iconst.i32 1
|
|
v7 = iadd_imm v4, -2
|
|
jump block2(v7, v5, v6) ; v6 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v13 = iadd v11, v12
|
|
v14 = iadd_imm v10, -1
|
|
v15 = icmp_imm eq v14, 0
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Starting Compilation passes, (during <no pass>)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Verify Cranelift IR, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Control flow graph, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Control flow graph
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dominator tree, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dominator tree
|
|
DEBUG cranelift_codegen::timing > timing: Ending Verify Cranelift IR
|
|
DEBUG cranelift_codegen::context > Number of CLIF instructions to optimize: 11
|
|
DEBUG cranelift_codegen::context > Number of CLIF blocks to optimize: 4
|
|
TRACE cranelift_codegen::context > Optimizing (opt level Speed):
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v1 = icmp_imm ule v0, 2
|
|
v2 = iconst.i32 1
|
|
brif v1, block3(v2), block1(v0, v2) ; v2 = 1, v2 = 1
|
|
|
|
block1(v4: i32, v5: i32):
|
|
v6 = iconst.i32 1
|
|
v7 = iadd_imm v4, -2
|
|
jump block2(v7, v5, v6) ; v6 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v13 = iadd v11, v12
|
|
v14 = iadd_imm v10, -1
|
|
v15 = icmp_imm eq v14, 0
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Starting Control flow graph, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Control flow graph
|
|
TRACE cranelift_codegen::legalizer > Pre-legalization function:
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v1 = icmp_imm ule v0, 2
|
|
v2 = iconst.i32 1
|
|
brif v1, block3(v2), block1(v0, v2) ; v2 = 1, v2 = 1
|
|
|
|
block1(v4: i32, v5: i32):
|
|
v6 = iconst.i32 1
|
|
v7 = iadd_imm v4, -2
|
|
jump block2(v7, v5, v6) ; v6 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v13 = iadd v11, v12
|
|
v14 = iadd_imm v10, -1
|
|
v15 = icmp_imm eq v14, 0
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
TRACE cranelift_codegen::legalizer > Post-legalization function:
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v21 = iconst.i32 2
|
|
v1 = icmp ule v0, v21 ; v21 = 2
|
|
v2 = iconst.i32 1
|
|
brif v1, block3(v2), block1(v0, v2) ; v2 = 1, v2 = 1
|
|
|
|
block1(v4: i32, v5: i32):
|
|
v6 = iconst.i32 1
|
|
v22 = iconst.i32 -2
|
|
v7 = iadd v4, v22 ; v22 = -2
|
|
jump block2(v7, v5, v6) ; v6 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v13 = iadd v11, v12
|
|
v23 = iconst.i32 -1
|
|
v14 = iadd v10, v23 ; v23 = -1
|
|
v24 = iconst.i32 0
|
|
v15 = icmp eq v14, v24 ; v24 = 0
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Starting Verify Cranelift IR, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Control flow graph, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Control flow graph
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dominator tree, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dominator tree
|
|
DEBUG cranelift_codegen::timing > timing: Ending Verify Cranelift IR
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dominator tree, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dominator tree
|
|
DEBUG cranelift_codegen::timing > timing: Starting Remove unreachable blocks, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Remove unreachable blocks
|
|
DEBUG cranelift_codegen::timing > timing: Starting Verify Cranelift IR, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Control flow graph, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Control flow graph
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dominator tree, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dominator tree
|
|
DEBUG cranelift_codegen::timing > timing: Ending Verify Cranelift IR
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dead code elimination, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dead code elimination
|
|
DEBUG cranelift_codegen::timing > timing: Starting Verify Cranelift IR, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Control flow graph, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Control flow graph
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dominator tree, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dominator tree
|
|
DEBUG cranelift_codegen::timing > timing: Ending Verify Cranelift IR
|
|
DEBUG cranelift_codegen::timing > timing: Starting Remove constant phi-nodes, (during Compilation passes)
|
|
DEBUG cranelift_codegen::remove_constant_phis > do_remove_constant_phis: done, 2 iters. 6 formals, of which 2 const.
|
|
DEBUG cranelift_codegen::timing > timing: Ending Remove constant phi-nodes
|
|
DEBUG cranelift_codegen::timing > timing: Starting Verify Cranelift IR, (during Compilation passes)
|
|
DEBUG cranelift_codegen::timing > timing: Starting Control flow graph, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Control flow graph
|
|
DEBUG cranelift_codegen::timing > timing: Starting Dominator tree, (during Verify Cranelift IR)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Dominator tree
|
|
DEBUG cranelift_codegen::timing > timing: Ending Verify Cranelift IR
|
|
DEBUG cranelift_codegen::timing > timing: Starting Egraph based optimizations, (during Compilation passes)
|
|
TRACE cranelift_codegen::context > About to optimize with egraph phase:
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v4 -> v0
|
|
v21 = iconst.i32 2
|
|
v1 = icmp ule v0, v21 ; v21 = 2
|
|
v2 = iconst.i32 1
|
|
v5 -> v2
|
|
brif v1, block3(v2), block1 ; v2 = 1
|
|
|
|
block1:
|
|
v6 = iconst.i32 1
|
|
v22 = iconst.i32 -2
|
|
v7 = iadd.i32 v4, v22 ; v22 = -2
|
|
jump block2(v7, v5, v6) ; v5 = 1, v6 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v13 = iadd v11, v12
|
|
v23 = iconst.i32 -1
|
|
v14 = iadd v10, v23 ; v23 = -1
|
|
v24 = iconst.i32 0
|
|
v15 = icmp eq v14, v24 ; v24 = 0
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Starting Loop analysis, (during Egraph based optimizations)
|
|
DEBUG cranelift_codegen::timing > timing: Ending Loop analysis
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: input is:
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v4 -> v0
|
|
v21 = iconst.i32 2
|
|
v1 = icmp ule v0, v21 ; v21 = 2
|
|
v2 = iconst.i32 1
|
|
v5 -> v2
|
|
brif v1, block3(v2), block1 ; v2 = 1
|
|
|
|
block1:
|
|
v6 = iconst.i32 1
|
|
v22 = iconst.i32 -2
|
|
v7 = iadd.i32 v4, v22 ; v22 = -2
|
|
jump block2(v7, v5, v6) ; v5 = 1, v6 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v13 = iadd v11, v12
|
|
v23 = iconst.i32 -1
|
|
v14 = iadd v10, v23 ; v23 = -1
|
|
v24 = iconst.i32 0
|
|
v15 = icmp eq v14, v24 ; v24 = 0
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: input to block0 is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst11: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst0: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst1: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst2: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: input to block1 is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst3: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst12: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst4: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst5: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: input to block2 is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst6: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst13: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst7: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst14: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst8: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst9: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: input to block3 is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::alias_analysis > after inst10: state is LastStores { heap: None, table: None, vmctx: None, other: None }
|
|
TRACE cranelift_codegen::egraph > Processing block block0
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for blockparam v0
|
|
TRACE cranelift_codegen::egraph > Processing inst inst11
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v21
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v21
|
|
TRACE cranelift_codegen::opts > iter: value v21
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v21
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v21, got v21
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst0
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v1
|
|
TRACE cranelift_codegen::egraph > rewriting arg v0 of inst inst0 to v0
|
|
TRACE cranelift_codegen::egraph > rewriting arg v21 of inst inst0 to v21
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v1
|
|
TRACE cranelift_codegen::opts > iter: value v1
|
|
TRACE cranelift_codegen::opts > -> value of type i8
|
|
TRACE cranelift_codegen::opts > iter: value v21
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v25
|
|
TRACE cranelift_codegen::opts > iter: value v25
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v25
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v25, got v25
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::opts > make_inst_ctor: UnaryImm { opcode: Iconst, imm: Imm64(3) } -> v25
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v26
|
|
TRACE cranelift_codegen::opts > iter: value v26
|
|
TRACE cranelift_codegen::opts > -> value of type i8
|
|
TRACE cranelift_codegen::opts > iter: value v25
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > iter: value v0
|
|
TRACE cranelift_codegen::opts > make_inst_ctor: IntCompare { opcode: Icmp, args: [v0, v25], cond: UnsignedLessThan } -> v26
|
|
TRACE cranelift_codegen::opts > iter: value v0
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v1, got v26
|
|
TRACE cranelift_codegen::egraph > -> union: now v27
|
|
TRACE cranelift_codegen::unionfind > union: v1, v26
|
|
TRACE cranelift_codegen::unionfind > union: v1, v27
|
|
TRACE cranelift_codegen::egraph > Processing inst inst1
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v2
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v2
|
|
TRACE cranelift_codegen::opts > iter: value v2
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v2
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v2, got v2
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst2
|
|
TRACE cranelift_codegen::egraph > rewriting arg v1 of inst inst2 to v27
|
|
TRACE cranelift_codegen::egraph > rewriting arg v2 of inst inst2 to v2
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: scanning at inst2 with state LastStores { heap: None, table: None, vmctx: None, other: None } (Brif { opcode: Brif, arg: v27, blocks: [BlockCall { values: EntityList { index: 13, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }, BlockCall { values: EntityList { index: 21, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }] })
|
|
TRACE cranelift_codegen::egraph > Processing block block1
|
|
TRACE cranelift_codegen::egraph > Processing inst inst3
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v6
|
|
TRACE cranelift_codegen::unionfind > union: v2, v6
|
|
TRACE cranelift_codegen::egraph > Processing inst inst12
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v22
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v22
|
|
TRACE cranelift_codegen::opts > iter: value v22
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v22
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v22, got v22
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst4
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v7
|
|
TRACE cranelift_codegen::egraph > rewriting arg v0 of inst inst4 to v0
|
|
TRACE cranelift_codegen::egraph > rewriting arg v22 of inst inst4 to v22
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v7
|
|
TRACE cranelift_codegen::opts > iter: value v7
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > iter: value v0
|
|
TRACE cranelift_codegen::opts > iter: value v22
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v7
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v7, got v7
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst5
|
|
TRACE cranelift_codegen::egraph > rewriting arg v7 of inst inst5 to v7
|
|
TRACE cranelift_codegen::egraph > rewriting arg v2 of inst inst5 to v2
|
|
TRACE cranelift_codegen::egraph > rewriting arg v6 of inst inst5 to v2
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: scanning at inst5 with state LastStores { heap: None, table: None, vmctx: None, other: None } (Jump { opcode: Jump, destination: BlockCall { values: EntityList { index: 37, unused: PhantomData<cranelift_codegen::ir::entities::Value> } } })
|
|
TRACE cranelift_codegen::egraph > Processing block block2
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for blockparam v10
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for blockparam v11
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for blockparam v12
|
|
TRACE cranelift_codegen::egraph > Processing inst inst6
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v13
|
|
TRACE cranelift_codegen::egraph > rewriting arg v11 of inst inst6 to v11
|
|
TRACE cranelift_codegen::egraph > rewriting arg v12 of inst inst6 to v12
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v13
|
|
TRACE cranelift_codegen::opts > iter: value v13
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > iter: value v11
|
|
TRACE cranelift_codegen::opts > iter: value v12
|
|
TRACE cranelift_codegen::egraph > Processing inst inst13
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v23
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v23
|
|
TRACE cranelift_codegen::opts > iter: value v23
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v23
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v23, got v23
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst7
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v14
|
|
TRACE cranelift_codegen::egraph > rewriting arg v10 of inst inst7 to v10
|
|
TRACE cranelift_codegen::egraph > rewriting arg v23 of inst inst7 to v23
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v14
|
|
TRACE cranelift_codegen::opts > iter: value v14
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > iter: value v10
|
|
TRACE cranelift_codegen::opts > iter: value v23
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v14
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v14, got v14
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst14
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v24
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v24
|
|
TRACE cranelift_codegen::opts > iter: value v24
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > remat: v24
|
|
TRACE cranelift_codegen::egraph > Returned from ISLE for v24, got v24
|
|
TRACE cranelift_codegen::egraph > -> same as orig value; skipping
|
|
TRACE cranelift_codegen::egraph > Processing inst inst8
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for v15
|
|
TRACE cranelift_codegen::egraph > rewriting arg v14 of inst inst8 to v14
|
|
TRACE cranelift_codegen::egraph > rewriting arg v24 of inst inst8 to v24
|
|
TRACE cranelift_codegen::egraph > Calling into ISLE with original value v15
|
|
TRACE cranelift_codegen::opts > iter: value v15
|
|
TRACE cranelift_codegen::opts > -> value of type i8
|
|
TRACE cranelift_codegen::opts > iter: value v14
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::opts > iter: value v14
|
|
TRACE cranelift_codegen::opts > -> value of type i32
|
|
TRACE cranelift_codegen::egraph > Processing inst inst9
|
|
TRACE cranelift_codegen::egraph > rewriting arg v15 of inst inst9 to v15
|
|
TRACE cranelift_codegen::egraph > rewriting arg v13 of inst inst9 to v13
|
|
TRACE cranelift_codegen::egraph > rewriting arg v14 of inst inst9 to v14
|
|
TRACE cranelift_codegen::egraph > rewriting arg v13 of inst inst9 to v13
|
|
TRACE cranelift_codegen::egraph > rewriting arg v11 of inst inst9 to v11
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: scanning at inst9 with state LastStores { heap: None, table: None, vmctx: None, other: None } (Brif { opcode: Brif, arg: v15, blocks: [BlockCall { values: EntityList { index: 57, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }, BlockCall { values: EntityList { index: 65, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }] })
|
|
TRACE cranelift_codegen::egraph > Processing block block3
|
|
TRACE cranelift_codegen::egraph > creating initial singleton eclass for blockparam v20
|
|
TRACE cranelift_codegen::egraph > Processing inst inst10
|
|
TRACE cranelift_codegen::egraph > rewriting arg v20 of inst inst10 to v20
|
|
TRACE cranelift_codegen::alias_analysis > alias analysis: scanning at inst10 with state LastStores { heap: None, table: None, vmctx: None, other: None } (MultiAry { opcode: Return, args: EntityList { index: 73, unused: PhantomData<cranelift_codegen::ir::entities::Value> } })
|
|
TRACE cranelift_codegen::egraph > egraph built:
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v4 -> v0
|
|
brif.i8 v27, block3(v2), block1 ; v2 = 1
|
|
|
|
block1:
|
|
jump block2(v7, v2, v2) ; v2 = 1, v2 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
brif.i8 v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
|
|
TRACE cranelift_codegen::egraph > -> v0 = Param(block0, 0)
|
|
TRACE cranelift_codegen::egraph > -> v1 = Result(inst0, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst0 = IntCompare { opcode: Icmp, args: [v0, v21], cond: UnsignedLessThanOrEqual }
|
|
TRACE cranelift_codegen::egraph > -> v2 = Result(inst1, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst1 = UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::egraph > -> v4 = Param(block0, 0)
|
|
TRACE cranelift_codegen::egraph > -> v5 = Result(inst1, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst1 = UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::egraph > -> v6 = Result(inst3, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst3 = UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::egraph > -> v7 = Result(inst4, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst4 = Binary { opcode: Iadd, args: [v0, v22] }
|
|
TRACE cranelift_codegen::egraph > -> v10 = Param(block2, 0)
|
|
TRACE cranelift_codegen::egraph > -> v11 = Param(block2, 1)
|
|
TRACE cranelift_codegen::egraph > -> v12 = Param(block2, 2)
|
|
TRACE cranelift_codegen::egraph > -> v13 = Result(inst6, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst6 = Binary { opcode: Iadd, args: [v11, v12] }
|
|
TRACE cranelift_codegen::egraph > -> v14 = Result(inst7, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst7 = Binary { opcode: Iadd, args: [v10, v23] }
|
|
TRACE cranelift_codegen::egraph > -> v15 = Result(inst8, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst8 = IntCompare { opcode: Icmp, args: [v14, v24], cond: Equal }
|
|
TRACE cranelift_codegen::egraph > -> v20 = Param(block3, 0)
|
|
TRACE cranelift_codegen::egraph > -> v21 = Result(inst11, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst11 = UnaryImm { opcode: Iconst, imm: Imm64(2) }
|
|
TRACE cranelift_codegen::egraph > -> v22 = Result(inst12, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst12 = UnaryImm { opcode: Iconst, imm: Imm64(-2) }
|
|
TRACE cranelift_codegen::egraph > -> v23 = Result(inst13, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst13 = UnaryImm { opcode: Iconst, imm: Imm64(-1) }
|
|
TRACE cranelift_codegen::egraph > -> v24 = Result(inst14, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst14 = UnaryImm { opcode: Iconst, imm: Imm64(0) }
|
|
TRACE cranelift_codegen::egraph > -> v25 = Result(inst15, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst15 = UnaryImm { opcode: Iconst, imm: Imm64(3) }
|
|
TRACE cranelift_codegen::egraph > -> v26 = Result(inst16, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst16 = IntCompare { opcode: Icmp, args: [v0, v25], cond: UnsignedLessThan }
|
|
TRACE cranelift_codegen::egraph > -> v27 = Result(inst16, 0)
|
|
TRACE cranelift_codegen::egraph > -> inst16 = IntCompare { opcode: Icmp, args: [v0, v25], cond: UnsignedLessThan }
|
|
TRACE cranelift_codegen::egraph > stats: Stats { pure_inst: 13, pure_inst_deduped: 1, skeleton_inst: 4, alias_analysis_removed: 0, new_inst: 2, union: 2, subsume: 0, remat: 8, rewrite_rule_invoked: 12, rewrite_depth_limit: 0, elaborate_visit_node: 0, elaborate_memoize_hit: 0, elaborate_memoize_miss: 0, elaborate_memoize_miss_remat: 0, elaborate_licm_hoist: 0, elaborate_func: 0, elaborate_func_pre_insts: 0, elaborate_func_post_insts: 0 }
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v0 def Param(block0, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v0: (Cost(0), v0)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v1 def Result(inst0, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v1: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v1: (Cost(4294967294), v1)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v2 def Result(inst1, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v2: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v2: (Cost(0), v2)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v4 def Param(block0, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v4: (Cost(0), v4)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v5 def Result(inst1, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v5: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v5: (Cost(0), v5)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v6 def Result(inst3, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v6: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v6: (Cost(0), v6)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v7 def Result(inst4, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v7: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v7: (Cost(4294967294), v7)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v10 def Param(block2, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v10: (Cost(0), v10)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v11 def Param(block2, 1)
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v11: (Cost(0), v11)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v12 def Param(block2, 2)
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v12: (Cost(0), v12)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v13 def Result(inst6, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v13: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v13: (Cost(2), v13)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v14 def Result(inst7, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v14: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v14: (Cost(4294967294), v14)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v15 def Result(inst8, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v15: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v15: (Cost(4294967294), v15)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v20 def Param(block3, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v20: (Cost(0), v20)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v21 def Result(inst11, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v21: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v21: (Cost(0), v21)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v22 def Result(inst12, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v22: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v22: (Cost(0), v22)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v23 def Result(inst13, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v23: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v23: (Cost(0), v23)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v24 def Result(inst14, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v24: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v24: (Cost(0), v24)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v25 def Result(inst15, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v25: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v25: (Cost(0), v25)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v26 def Result(inst16, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v26: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v26: (Cost(3), v26)
|
|
TRACE cranelift_codegen::egraph::elaborate > computing best for value v27 def Result(inst16, 0)
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v27: result, computing cost
|
|
TRACE cranelift_codegen::egraph::elaborate > best for eclass v27: (Cost(3), v27)
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate_block: block block0
|
|
TRACE cranelift_codegen::egraph::elaborate > start_block: block block0 with idom None at loop depth 0 scope depth 1
|
|
TRACE cranelift_codegen::egraph::elaborate > block block0: loop stack is []
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborating inst inst2 with results []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v27
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v26 canonical v1 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v26
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v26 -> best v26
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v26 is result 0 of inst16
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst IntCompare { opcode: Icmp, args: [v0, v25], cond: UnsignedLessThan }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v0 canonical v0 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v0
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v0 -> best v0
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v0 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v25 canonical v25 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v25
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v25 -> best v25
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v25 is result 0 of inst15
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst UnaryImm { opcode: Iconst, imm: Imm64(3) }
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst15 result 0 args 0 remat true before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 0, loop_stack: []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst2 insert_block block0
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst15 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v25
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst16 result 0 args 2 remat false before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block0, value: v0 } hoist level 0
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block0, value: v25 } hoist level 0
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 0, loop_stack: []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst2 insert_block block0
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst16 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v26
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block0, value: v26 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 canonical v2 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 -> best v2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v2 is result 0 of inst1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst1 result 0 args 0 remat true before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 0, loop_stack: []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst2 insert_block block0
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst1 before inst2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block0, value: v2 }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate_block: block block3
|
|
TRACE cranelift_codegen::egraph::elaborate > start_block: block block3 with idom Some(block0) at loop depth 0 scope depth 2
|
|
TRACE cranelift_codegen::egraph::elaborate > block block3: loop stack is []
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborating inst inst10 with results []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting before inst10
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v20
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v20 canonical v20 before inst10
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v20
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v20 -> best v20
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v20 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block3, value: v20 }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate_block: block block1
|
|
TRACE cranelift_codegen::egraph::elaborate > start_block: block block1 with idom Some(block0) at loop depth 0 scope depth 2
|
|
TRACE cranelift_codegen::egraph::elaborate > block block1: loop stack is []
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborating inst inst5 with results []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v7
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v7 canonical v7 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v7
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v7 -> best v7
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v7 is result 0 of inst4
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst Binary { opcode: Iadd, args: [v0, v22] }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v0 canonical v0 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v0
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v0 -> best v0
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v0 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v22 canonical v22 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v22
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v22 -> best v22
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v22 is result 0 of inst12
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst UnaryImm { opcode: Iconst, imm: Imm64(-2) }
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst12 result 0 args 0 remat true before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 0, loop_stack: []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst5 insert_block block1
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst12 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v22
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst4 result 0 args 2 remat true before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block0, value: v0 } hoist level 0
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block1, value: v22 } hoist level 0
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 0, loop_stack: []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst5 insert_block block1
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst4 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v7
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block1, value: v7 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 canonical v2 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 -> best v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 -> remat
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v2 is result 0 of inst1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst1 result 0 args 0 remat true before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 0, loop_stack: []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst5 insert_block block1
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst1 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inst inst1 already has a location; cloned to inst17
|
|
TRACE cranelift_codegen::unionfind > union: v2, v28
|
|
TRACE cranelift_codegen::egraph::elaborate > -> cloned inst has new result v28 for orig v2
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block1, value: v28 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 canonical v2 before inst5
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 -> best v2
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v2 -> ElaboratedValue { in_block: block1, value: v28 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block1, value: v28 }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate_block: block block2
|
|
TRACE cranelift_codegen::egraph::elaborate > start_block: block block2 with idom Some(block1) at loop depth 0 scope depth 3
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop header, pushing; depth now 1
|
|
TRACE cranelift_codegen::egraph::elaborate > block block2: loop stack is [LoopStackEntry { lp: loop0, hoist_block: block1, scope_depth: 2 }]
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborating inst inst9 with results []
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v15
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v15 canonical v15 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v15
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v15 -> best v15
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v15 is result 0 of inst8
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst IntCompare { opcode: Icmp, args: [v14, v24], cond: Equal }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v14 canonical v14 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v14
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v14 -> best v14
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v14 is result 0 of inst7
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst Binary { opcode: Iadd, args: [v10, v23] }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v10 canonical v10 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v10
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v10 -> best v10
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v10 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v23 canonical v23 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v23
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v23 -> best v23
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v23 is result 0 of inst13
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst UnaryImm { opcode: Iconst, imm: Imm64(-1) }
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst13 result 0 args 0 remat true before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 1, loop_stack: [LoopStackEntry { lp: loop0, hoist_block: block1, scope_depth: 2 }]
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst9 insert_block block2
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst13 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v23
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst7 result 0 args 2 remat true before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block2, value: v10 } hoist level 1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block2, value: v23 } hoist level 1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 1; cur loop depth: 1, loop_stack: [LoopStackEntry { lp: loop0, hoist_block: block1, scope_depth: 2 }]
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst9 insert_block block2
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst7 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v14
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v24 canonical v24 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v24
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v24 -> best v24
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = true
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v24 is result 0 of inst14
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst UnaryImm { opcode: Iconst, imm: Imm64(0) }
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst14 result 0 args 0 remat true before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 0; cur loop depth: 1, loop_stack: [LoopStackEntry { lp: loop0, hoist_block: block1, scope_depth: 2 }]
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst9 insert_block block2
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst14 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v24
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst8 result 0 args 2 remat false before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block2, value: v14 } hoist level 1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block2, value: v24 } hoist level 1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 1; cur loop depth: 1, loop_stack: [LoopStackEntry { lp: loop0, hoist_block: block1, scope_depth: 2 }]
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst9 insert_block block2
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst8 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v15
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block2, value: v15 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v13
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v13 canonical v13 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v13
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v13 -> best v13
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v13 is result 0 of inst6
|
|
TRACE cranelift_codegen::egraph::elaborate > -> result 0 of inst Binary { opcode: Iadd, args: [v11, v12] }
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v11 canonical v11 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v11
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v11 -> best v11
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v11 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v12 canonical v12 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v12
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v12 -> best v12
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v12 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > PendingInst: inst6 result 0 args 2 remat false before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block2, value: v11 } hoist level 1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg: elab_value ElaboratedValue { in_block: block2, value: v12 } hoist level 1
|
|
TRACE cranelift_codegen::egraph::elaborate > -> loop hoist level: 1; cur loop depth: 1, loop_stack: [LoopStackEntry { lp: loop0, hoist_block: block1, scope_depth: 2 }]
|
|
TRACE cranelift_codegen::egraph::elaborate > -> decided to place: before inst9 insert_block block2
|
|
TRACE cranelift_codegen::egraph::elaborate > need inst inst6 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > -> no location; using original inst
|
|
TRACE cranelift_codegen::egraph::elaborate > -> inserting identity mapping for v13
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block2, value: v13 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v14
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v14 canonical v14 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v14
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v14 -> best v14
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v14 -> ElaboratedValue { in_block: block2, value: v14 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block2, value: v14 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v13
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v13 canonical v13 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v13
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v13 -> best v13
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v13 -> ElaboratedValue { in_block: block2, value: v13 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block2, value: v13 }
|
|
TRACE cranelift_codegen::egraph::elaborate > -> arg v11
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v11 canonical v11 before inst9
|
|
TRACE cranelift_codegen::egraph::elaborate > looking up best value for v11
|
|
TRACE cranelift_codegen::egraph::elaborate > elaborate: value v11 -> best v11
|
|
TRACE cranelift_codegen::egraph::elaborate > -> not present in map; remat = false
|
|
TRACE cranelift_codegen::egraph::elaborate > -> value v11 is a blockparam
|
|
TRACE cranelift_codegen::egraph::elaborate > -> rewrote arg to ElaboratedValue { in_block: block2, value: v11 }
|
|
DEBUG cranelift_codegen::context > egraph stats: Stats { pure_inst: 13, pure_inst_deduped: 1, skeleton_inst: 4, alias_analysis_removed: 0, new_inst: 2, union: 2, subsume: 0, remat: 8, rewrite_rule_invoked: 12, rewrite_depth_limit: 0, elaborate_visit_node: 21, elaborate_memoize_hit: 3, elaborate_memoize_miss: 18, elaborate_memoize_miss_remat: 1, elaborate_licm_hoist: 0, elaborate_func: 1, elaborate_func_pre_insts: 17, elaborate_func_post_insts: 18 }
|
|
TRACE cranelift_codegen::context > After egraph optimization:
|
|
function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v4 -> v0
|
|
v25 = iconst.i32 3
|
|
v26 = icmp ult v0, v25 ; v25 = 3
|
|
v27 -> v26
|
|
v2 = iconst.i32 1
|
|
v5 -> v2
|
|
brif v26, block3(v2), block1 ; v2 = 1
|
|
|
|
block1:
|
|
v22 = iconst.i32 -2
|
|
v7 = iadd.i32 v0, v22 ; v22 = -2
|
|
v28 = iconst.i32 1
|
|
jump block2(v7, v28, v28) ; v28 = 1, v28 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v23 = iconst.i32 -1
|
|
v14 = iadd v10, v23 ; v23 = -1
|
|
v24 = iconst.i32 0
|
|
v15 = icmp eq v14, v24 ; v24 = 0
|
|
v13 = iadd v11, v12
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Ending Egraph based optimizations
|
|
TRACE cranelift_codegen::machinst::abi > ABISig: sig Signature { params: [AbiParam { value_type: types::I32, purpose: Normal, extension: None }], returns: [AbiParam { value_type: types::I32, purpose: Normal, extension: None }], call_conv: Fast } => args end = 2 rets end = 1
|
|
arg stack = 0 ret stack = 0 stack_ret_arg = false
|
|
TRACE cranelift_codegen::machinst::abi > ABI: func signature Signature { params: [AbiParam { value_type: types::I32, purpose: Normal, extension: None }], returns: [AbiParam { value_type: types::I32, purpose: Normal, extension: None }], call_conv: Fast }
|
|
TRACE cranelift_codegen::machinst::blockorder > BlockLoweringOrder: function body function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v4 -> v0
|
|
v25 = iconst.i32 3
|
|
v26 = icmp ult v0, v25 ; v25 = 3
|
|
v27 -> v26
|
|
v2 = iconst.i32 1
|
|
v5 -> v2
|
|
brif v26, block3(v2), block1 ; v2 = 1
|
|
|
|
block1:
|
|
v22 = iconst.i32 -2
|
|
v7 = iadd.i32 v0, v22 ; v22 = -2
|
|
v28 = iconst.i32 1
|
|
jump block2(v7, v28, v28) ; v28 = 1, v28 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v23 = iconst.i32 -1
|
|
v14 = iadd v10, v23 ; v23 = -1
|
|
v24 = iconst.i32 0
|
|
v15 = icmp eq v14, v24 ; v24 = 0
|
|
v13 = iadd v11, v12
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
TRACE cranelift_codegen::machinst::blockorder > BlockLoweringOrder: BlockLoweringOrder {
|
|
lowered_order: [
|
|
Orig {
|
|
block: block0,
|
|
},
|
|
CriticalEdge {
|
|
pred: block0,
|
|
succ: block3,
|
|
succ_idx: 0,
|
|
},
|
|
Orig {
|
|
block: block1,
|
|
},
|
|
Orig {
|
|
block: block2,
|
|
},
|
|
CriticalEdge {
|
|
pred: block2,
|
|
succ: block3,
|
|
succ_idx: 0,
|
|
},
|
|
CriticalEdge {
|
|
pred: block2,
|
|
succ: block2,
|
|
succ_idx: 1,
|
|
},
|
|
Orig {
|
|
block: block3,
|
|
},
|
|
],
|
|
lowered_succ_indices: [
|
|
Block(
|
|
1,
|
|
),
|
|
Block(
|
|
2,
|
|
),
|
|
Block(
|
|
6,
|
|
),
|
|
Block(
|
|
3,
|
|
),
|
|
Block(
|
|
4,
|
|
),
|
|
Block(
|
|
5,
|
|
),
|
|
Block(
|
|
6,
|
|
),
|
|
Block(
|
|
3,
|
|
),
|
|
],
|
|
lowered_succ_ranges: [
|
|
(
|
|
Some(
|
|
inst2,
|
|
),
|
|
0..2,
|
|
),
|
|
(
|
|
None,
|
|
2..3,
|
|
),
|
|
(
|
|
Some(
|
|
inst5,
|
|
),
|
|
3..4,
|
|
),
|
|
(
|
|
Some(
|
|
inst9,
|
|
),
|
|
4..6,
|
|
),
|
|
(
|
|
None,
|
|
6..7,
|
|
),
|
|
(
|
|
None,
|
|
7..8,
|
|
),
|
|
(
|
|
None,
|
|
8..8,
|
|
),
|
|
],
|
|
cold_blocks: {},
|
|
indirect_branch_targets: {},
|
|
}
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 param v0: regs ValueRegs { parts: [v128, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst15 (UnaryImm { opcode: Iconst, imm: Imm64(3) }): result v25 regs ValueRegs { parts: [v129, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst16 (IntCompare { opcode: Icmp, args: [v0, v25], cond: UnsignedLessThan }): result v26 regs ValueRegs { parts: [v130, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst1 (UnaryImm { opcode: Iconst, imm: Imm64(1) }): result v2 regs ValueRegs { parts: [v131, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst12 (UnaryImm { opcode: Iconst, imm: Imm64(-2) }): result v22 regs ValueRegs { parts: [v132, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst4 (Binary { opcode: Iadd, args: [v0, v22] }): result v7 regs ValueRegs { parts: [v133, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst17 (UnaryImm { opcode: Iconst, imm: Imm64(1) }): result v28 regs ValueRegs { parts: [v134, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 param v10: regs ValueRegs { parts: [v135, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 param v11: regs ValueRegs { parts: [v136, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 param v12: regs ValueRegs { parts: [v137, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst13 (UnaryImm { opcode: Iconst, imm: Imm64(-1) }): result v23 regs ValueRegs { parts: [v138, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst7 (Binary { opcode: Iadd, args: [v10, v23] }): result v14 regs ValueRegs { parts: [v139, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst14 (UnaryImm { opcode: Iconst, imm: Imm64(0) }): result v24 regs ValueRegs { parts: [v140, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst8 (IntCompare { opcode: Icmp, args: [v14, v24], cond: Equal }): result v15 regs ValueRegs { parts: [v141, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst6 (Binary { opcode: Iadd, args: [v11, v12] }): result v13 regs ValueRegs { parts: [v142, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block3 param v20: regs ValueRegs { parts: [v143, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst15 has color 1
|
|
TRACE cranelift_codegen::machinst::lower > -> constant: 3
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst16 has color 1
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst1 has color 1
|
|
TRACE cranelift_codegen::machinst::lower > -> constant: 1
|
|
TRACE cranelift_codegen::machinst::lower > bb block0 inst inst2 has color 1
|
|
TRACE cranelift_codegen::machinst::lower > -> side-effecting; incrementing color for next inst
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst12 has color 3
|
|
TRACE cranelift_codegen::machinst::lower > -> constant: 18446744073709551614
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst4 has color 3
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst17 has color 3
|
|
TRACE cranelift_codegen::machinst::lower > -> constant: 1
|
|
TRACE cranelift_codegen::machinst::lower > bb block1 inst inst5 has color 3
|
|
TRACE cranelift_codegen::machinst::lower > -> side-effecting; incrementing color for next inst
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst13 has color 5
|
|
TRACE cranelift_codegen::machinst::lower > -> constant: 18446744073709551615
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst7 has color 5
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst14 has color 5
|
|
TRACE cranelift_codegen::machinst::lower > -> constant: 0
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst8 has color 5
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst6 has color 5
|
|
TRACE cranelift_codegen::machinst::lower > bb block2 inst inst9 has color 5
|
|
TRACE cranelift_codegen::machinst::lower > -> side-effecting; incrementing color for next inst
|
|
TRACE cranelift_codegen::machinst::lower > bb block3 inst inst10 has color 7
|
|
TRACE cranelift_codegen::machinst::lower > -> side-effecting; incrementing color for next inst
|
|
TRACE cranelift_codegen::machinst::lower > arg v0 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v25 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v26 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v2 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v0 used, old state Once, new Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v0 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > arg v22 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v7 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v28 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v28 used, old state Once, new Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v28 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > arg v10 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v23 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v14 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v24 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v11 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v12 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v15 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v13 used, old state Unused, new Once
|
|
TRACE cranelift_codegen::machinst::lower > arg v14 used, old state Once, new Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v14 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > -> DFS reaches v10
|
|
TRACE cranelift_codegen::machinst::lower > -> became Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v10 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > -> DFS reaches v23
|
|
TRACE cranelift_codegen::machinst::lower > -> became Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v23 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > arg v13 used, old state Once, new Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v13 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > -> DFS reaches v11
|
|
TRACE cranelift_codegen::machinst::lower > -> became Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v11 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > -> DFS reaches v12
|
|
TRACE cranelift_codegen::machinst::lower > -> became Multiple
|
|
TRACE cranelift_codegen::machinst::lower > -> pushing args for v12 onto stack
|
|
TRACE cranelift_codegen::machinst::lower > arg v11 used, old state Multiple, new Multiple
|
|
TRACE cranelift_codegen::machinst::lower > arg v20 used, old state Unused, new Once
|
|
DEBUG cranelift_codegen::machinst::compile > Number of CLIF instructions to lower: 18
|
|
DEBUG cranelift_codegen::machinst::compile > Number of CLIF blocks to lower: 4
|
|
DEBUG cranelift_codegen::timing > timing: Starting VCode lowering, (during Compilation passes)
|
|
TRACE cranelift_codegen::machinst::lower > about to lower function: function %fibonacci(i32) -> i32 fast {
|
|
block0(v0: i32):
|
|
v4 -> v0
|
|
v25 = iconst.i32 3
|
|
v26 = icmp ult v0, v25 ; v25 = 3
|
|
v27 -> v26
|
|
v2 = iconst.i32 1
|
|
v5 -> v2
|
|
brif v26, block3(v2), block1 ; v2 = 1
|
|
|
|
block1:
|
|
v22 = iconst.i32 -2
|
|
v7 = iadd.i32 v0, v22 ; v22 = -2
|
|
v28 = iconst.i32 1
|
|
jump block2(v7, v28, v28) ; v28 = 1, v28 = 1
|
|
|
|
block2(v10: i32, v11: i32, v12: i32):
|
|
v23 = iconst.i32 -1
|
|
v14 = iadd v10, v23 ; v23 = -1
|
|
v24 = iconst.i32 0
|
|
v15 = icmp eq v14, v24 ; v24 = 0
|
|
v13 = iadd v11, v12
|
|
brif v15, block3(v13), block2(v14, v13, v11)
|
|
|
|
block3(v20: i32):
|
|
return v20
|
|
}
|
|
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block3 inst inst10 (MultiAry { opcode: Return, args: EntityList { index: 73, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }) is_branch false side_effect true value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lowering: inst inst10: MultiAry { opcode: Return, args: EntityList { index: 73, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v20
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v143, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > emit: ret %v143=%rax
|
|
TRACE cranelift_codegen::machinst::lower > emit: jmp label3
|
|
TRACE cranelift_codegen::machinst::lower > emit: jmp label6
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_branches: block block2 branch inst9 targets [MachLabel(4), MachLabel(5)]
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v14
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v139, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > emit: testl %v139l, %v139l
|
|
TRACE cranelift_codegen::machinst::lower > emit: jz label4; j label5
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v13
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v142, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v14
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v139, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v13
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v142, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v11
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v136, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block2 inst inst9 (Brif { opcode: Brif, arg: v15, blocks: [BlockCall { values: EntityList { index: 57, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }, BlockCall { values: EntityList { index: 65, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }] }) is_branch true side_effect true value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block2 inst inst6 (Binary { opcode: Iadd, args: [v11, v12] }) is_branch false side_effect false value_needed true
|
|
TRACE cranelift_codegen::machinst::lower > lowering: inst inst6: Binary { opcode: Iadd, args: [v11, v12] }
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v11 at cur_inst Some(inst6) cur_scan_entry_color Some(InstColor(5))
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v12 at cur_inst Some(inst6) cur_scan_entry_color Some(InstColor(5))
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v11
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v136, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v12
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v137, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > emit: lea 0(%v136,%v137,1), %v148l
|
|
TRACE cranelift_codegen::machinst::lower > set vreg alias: from v142 to v148
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block2 inst inst8 (IntCompare { opcode: Icmp, args: [v14, v24], cond: Equal }) is_branch false side_effect false value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block2 inst inst14 (UnaryImm { opcode: Iconst, imm: Imm64(0) }) is_branch false side_effect false value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block2 inst inst7 (Binary { opcode: Iadd, args: [v10, v23] }) is_branch false side_effect false value_needed true
|
|
TRACE cranelift_codegen::machinst::lower > lowering: inst inst7: Binary { opcode: Iadd, args: [v10, v23] }
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v10 at cur_inst Some(inst7) cur_scan_entry_color Some(InstColor(5))
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v23 at cur_inst Some(inst7) cur_scan_entry_color Some(InstColor(5))
|
|
TRACE cranelift_codegen::machinst::lower > -> src inst inst13
|
|
TRACE cranelift_codegen::machinst::lower > -> has lowering side effect: false
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v10
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v135, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > emit: lea -1(%v135), %v149l
|
|
TRACE cranelift_codegen::machinst::lower > set vreg alias: from v139 to v149
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block2 inst inst13 (UnaryImm { opcode: Iconst, imm: Imm64(-1) }) is_branch false side_effect false value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_branches: block block1 branch inst5 targets [MachLabel(3)]
|
|
TRACE cranelift_codegen::machinst::lower > emit: jmp label3
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v7
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v133, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v28
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v134, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v28
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v134, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block1 inst inst5 (Jump { opcode: Jump, destination: BlockCall { values: EntityList { index: 37, unused: PhantomData<cranelift_codegen::ir::entities::Value> } } }) is_branch true side_effect true value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block1 inst inst17 (UnaryImm { opcode: Iconst, imm: Imm64(1) }) is_branch false side_effect false value_needed true
|
|
TRACE cranelift_codegen::machinst::lower > lowering: inst inst17: UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::machinst::lower > emit: movl $1, %v150l
|
|
TRACE cranelift_codegen::machinst::lower > set vreg alias: from v134 to v150
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block1 inst inst4 (Binary { opcode: Iadd, args: [v0, v22] }) is_branch false side_effect false value_needed true
|
|
TRACE cranelift_codegen::machinst::lower > lowering: inst inst4: Binary { opcode: Iadd, args: [v0, v22] }
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v0 at cur_inst Some(inst4) cur_scan_entry_color Some(InstColor(3))
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v22 at cur_inst Some(inst4) cur_scan_entry_color Some(InstColor(3))
|
|
TRACE cranelift_codegen::machinst::lower > -> src inst inst12
|
|
TRACE cranelift_codegen::machinst::lower > -> has lowering side effect: false
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v0
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v128, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > emit: lea -2(%v128), %v151l
|
|
TRACE cranelift_codegen::machinst::lower > set vreg alias: from v133 to v151
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block1 inst inst12 (UnaryImm { opcode: Iconst, imm: Imm64(-2) }) is_branch false side_effect false value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > emit: jmp label6
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_branches: block block0 branch inst2 targets [MachLabel(1), MachLabel(2)]
|
|
TRACE cranelift_codegen::machinst::lower > get_input_for_val: val v25 at cur_inst Some(inst2) cur_scan_entry_color None
|
|
TRACE cranelift_codegen::machinst::lower > -> src inst inst15
|
|
TRACE cranelift_codegen::machinst::lower > -> has lowering side effect: false
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v0
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v128, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > emit: cmpl $3, %v128l
|
|
TRACE cranelift_codegen::machinst::lower > emit: jb label1; j label2
|
|
TRACE cranelift_codegen::machinst::lower > put_value_in_regs: val v2
|
|
TRACE cranelift_codegen::machinst::lower > -> regs ValueRegs { parts: [v131, v2097151] }
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block0 inst inst2 (Brif { opcode: Brif, arg: v26, blocks: [BlockCall { values: EntityList { index: 13, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }, BlockCall { values: EntityList { index: 21, unused: PhantomData<cranelift_codegen::ir::entities::Value> } }] }) is_branch true side_effect true value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block0 inst inst1 (UnaryImm { opcode: Iconst, imm: Imm64(1) }) is_branch false side_effect false value_needed true
|
|
TRACE cranelift_codegen::machinst::lower > lowering: inst inst1: UnaryImm { opcode: Iconst, imm: Imm64(1) }
|
|
TRACE cranelift_codegen::machinst::lower > emit: movl $1, %v153l
|
|
TRACE cranelift_codegen::machinst::lower > set vreg alias: from v131 to v153
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block0 inst inst16 (IntCompare { opcode: Icmp, args: [v0, v25], cond: UnsignedLessThan }) is_branch false side_effect false value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > lower_clif_block: block block0 inst inst15 (UnaryImm { opcode: Iconst, imm: Imm64(3) }) is_branch false side_effect false value_needed false
|
|
TRACE cranelift_codegen::machinst::lower > gen_arg_setup: entry BB block0 args are:
|
|
[v0]
|
|
TRACE cranelift_codegen::machinst::abi > gen_retval_area_setup: not needed
|
|
TRACE cranelift_codegen::machinst::lower > emit: args %v128=%rdi
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 144, class = Int) -> VReg(vreg = 144, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 145, class = Int) -> VReg(vreg = 145, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 146, class = Int) -> VReg(vreg = 146, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 147, class = Int) -> VReg(vreg = 147, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 142, class = Int) -> VReg(vreg = 148, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 139, class = Int) -> VReg(vreg = 149, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 142, class = Int) -> VReg(vreg = 148, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 136, class = Int) -> VReg(vreg = 136, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 133, class = Int) -> VReg(vreg = 151, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 134, class = Int) -> VReg(vreg = 150, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 134, class = Int) -> VReg(vreg = 150, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 152, class = Int) -> VReg(vreg = 152, class = Int)
|
|
TRACE cranelift_codegen::machinst::vcode > operandcollector: block arg VReg(vreg = 131, class = Int) -> VReg(vreg = 153, class = Int)
|
|
TRACE cranelift_codegen::machinst::lower > built vcode: VCode {
|
|
Entry block: 0
|
|
v131 := v153
|
|
v133 := v151
|
|
v134 := v150
|
|
v139 := v149
|
|
v142 := v148
|
|
Block 0():
|
|
(original IR block: block0)
|
|
(successor: Block 1(v153))
|
|
(successor: Block 2())
|
|
(instruction range: 0 .. 4)
|
|
Inst 0: args %v128=%rdi
|
|
Inst 1: movl $1, %v153l
|
|
Inst 2: cmpl $3, %v128l
|
|
Inst 3: jb label1; j label2
|
|
Block 1(v152):
|
|
(successor: Block 6(v152))
|
|
(instruction range: 4 .. 5)
|
|
Inst 4: jmp label6
|
|
Block 2():
|
|
(original IR block: block1)
|
|
(successor: Block 3(v151, v150, v150))
|
|
(instruction range: 5 .. 8)
|
|
Inst 5: lea -2(%v128), %v151l
|
|
Inst 6: movl $1, %v150l
|
|
Inst 7: jmp label3
|
|
Block 3(v135, v136, v137):
|
|
(original IR block: block2)
|
|
(successor: Block 4(v148))
|
|
(successor: Block 5(v149, v148, v136))
|
|
(instruction range: 8 .. 12)
|
|
Inst 8: lea -1(%v135), %v149l
|
|
Inst 9: lea 0(%v136,%v137,1), %v148l
|
|
Inst 10: testl %v139l, %v139l
|
|
Inst 11: jz label4; j label5
|
|
Block 4(v147):
|
|
(successor: Block 6(v147))
|
|
(instruction range: 12 .. 13)
|
|
Inst 12: jmp label6
|
|
Block 5(v144, v145, v146):
|
|
(successor: Block 3(v144, v145, v146))
|
|
(instruction range: 13 .. 14)
|
|
Inst 13: jmp label3
|
|
Block 6(v143):
|
|
(original IR block: block3)
|
|
(instruction range: 14 .. 15)
|
|
Inst 14: ret %v143=%rax
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Ending VCode lowering
|
|
DEBUG cranelift_codegen::machinst::compile > Number of lowered vcode instructions: 15
|
|
DEBUG cranelift_codegen::machinst::compile > Number of lowered vcode blocks: 7
|
|
TRACE cranelift_codegen::machinst::compile > vcode from lowering:
|
|
VCode {
|
|
Entry block: 0
|
|
v131 := v153
|
|
v133 := v151
|
|
v134 := v150
|
|
v139 := v149
|
|
v142 := v148
|
|
Block 0():
|
|
(original IR block: block0)
|
|
(successor: Block 1(v153))
|
|
(successor: Block 2())
|
|
(instruction range: 0 .. 4)
|
|
Inst 0: args %v128=%rdi
|
|
Inst 1: movl $1, %v153l
|
|
Inst 2: cmpl $3, %v128l
|
|
Inst 3: jb label1; j label2
|
|
Block 1(v152):
|
|
(successor: Block 6(v152))
|
|
(instruction range: 4 .. 5)
|
|
Inst 4: jmp label6
|
|
Block 2():
|
|
(original IR block: block1)
|
|
(successor: Block 3(v151, v150, v150))
|
|
(instruction range: 5 .. 8)
|
|
Inst 5: lea -2(%v128), %v151l
|
|
Inst 6: movl $1, %v150l
|
|
Inst 7: jmp label3
|
|
Block 3(v135, v136, v137):
|
|
(original IR block: block2)
|
|
(successor: Block 4(v148))
|
|
(successor: Block 5(v149, v148, v136))
|
|
(instruction range: 8 .. 12)
|
|
Inst 8: lea -1(%v135), %v149l
|
|
Inst 9: lea 0(%v136,%v137,1), %v148l
|
|
Inst 10: testl %v139l, %v139l
|
|
Inst 11: jz label4; j label5
|
|
Block 4(v147):
|
|
(successor: Block 6(v147))
|
|
(instruction range: 12 .. 13)
|
|
Inst 12: jmp label6
|
|
Block 5(v144, v145, v146):
|
|
(successor: Block 3(v144, v145, v146))
|
|
(instruction range: 13 .. 14)
|
|
Inst 13: jmp label3
|
|
Block 6(v143):
|
|
(original IR block: block3)
|
|
(instruction range: 14 .. 15)
|
|
Inst 14: ret %v143=%rax
|
|
}
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Starting Register allocation, (during Compilation passes)
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 0
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 2
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 3
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 5
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 4
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 1
|
|
TRACE regalloc2::ion::fast_alloc > Calculating uses for block 6
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block6
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: []
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v143i fixed(p0i) was_live = false
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block6: []
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block1
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: []
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block1: []
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block4
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: []
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block4: []
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block5
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: []
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block5: []
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block3
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: []
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v149i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v149i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v148i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v136i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v137i reg was_live = false
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v149i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v135i reg was_live = false
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block3: []
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block2
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: []
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v150i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v151i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v128i reg was_live = false
|
|
TRACE regalloc2::ion::fast_alloc > liveouts of block0 changed to: [128]
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block2: [128]
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block0
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: [128]
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v128i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v153i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v128i fixed(p7i) was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block0: []
|
|
TRACE regalloc2::ion::fast_alloc > computing liveins for block0
|
|
TRACE regalloc2::ion::fast_alloc > -> initial liveout set: [128]
|
|
TRACE regalloc2::ion::fast_alloc > op Use: v128i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v153i reg was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > op Def: v128i fixed(p7i) was_live = true
|
|
TRACE regalloc2::ion::fast_alloc > computed liveins at block0: []
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 0
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 0 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 0)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v128i fixed(p7i)
|
|
TRACE regalloc2::ion::fast_alloc > Allocated slot 0 for v128
|
|
TRACE regalloc2::ion::fast_alloc > Chose p7i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v128i fixed(p7i)
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p7i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 1 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 1)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v153i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v153i reg
|
|
TRACE regalloc2::ion::fast_alloc > Allocated slot 1 for v153
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 2 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 2)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Use: v128i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Use: v128i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 3 (refs_on_stack: false, is_ret: false, is_branch: true, alloc_idx: 3)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 0
|
|
TRACE regalloc2::ion::fast_alloc > Successors not allocated. Creating allocation
|
|
TRACE regalloc2::ion::fast_alloc > Creating block 1
|
|
TRACE regalloc2::ion::fast_alloc > v153 died at the edge, reuse stack slot for v152
|
|
TRACE regalloc2::ion::fast_alloc > Creating block 2
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 2
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 5 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 3)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v151i reg
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v128i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v128i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 1
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v151i reg
|
|
TRACE regalloc2::ion::fast_alloc > Allocated slot 2 for v151
|
|
TRACE regalloc2::ion::fast_alloc > Chose p7i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p7i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 6 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 5)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v150i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v150i reg
|
|
TRACE regalloc2::ion::fast_alloc > Allocated slot 3 for v150
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 7 (refs_on_stack: false, is_ret: false, is_branch: true, alloc_idx: 6)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 2
|
|
TRACE regalloc2::ion::fast_alloc > Successors not allocated. Creating allocation
|
|
TRACE regalloc2::ion::fast_alloc > Creating block 3
|
|
TRACE regalloc2::ion::fast_alloc > v151 died at the edge, reuse stack slot for v135
|
|
TRACE regalloc2::ion::fast_alloc > v150 died at the edge, reuse stack slot for v136
|
|
TRACE regalloc2::ion::fast_alloc > Moving v150 from slot 3 to slot 4 for v137
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 3
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 8 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 6)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v149i reg
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v135i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v135i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 1
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v149i reg
|
|
TRACE regalloc2::ion::fast_alloc > Allocated slot 5 for v149
|
|
TRACE regalloc2::ion::fast_alloc > Chose p7i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p7i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 9 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 8)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v148i reg
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v136i reg
|
|
TRACE regalloc2::ion::fast_alloc > Operand 2: Use: v137i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v136i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 1
|
|
TRACE regalloc2::ion::fast_alloc > Operand 2: Use: v137i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p7i for operand 2
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Def: v148i reg
|
|
TRACE regalloc2::ion::fast_alloc > Allocated slot 6 for v148
|
|
TRACE regalloc2::ion::fast_alloc > Chose p0i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p0i
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p7i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 10 (refs_on_stack: false, is_ret: false, is_branch: false, alloc_idx: 11)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Use: v149i reg
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v149i reg
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Use: v149i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p6i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Operand 1: Use: v149i reg
|
|
TRACE regalloc2::ion::fast_alloc > Chose p7i for operand 1
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p6i
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p7i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 11 (refs_on_stack: false, is_ret: false, is_branch: true, alloc_idx: 13)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 3
|
|
TRACE regalloc2::ion::fast_alloc > Successors not allocated. Creating allocation
|
|
TRACE regalloc2::ion::fast_alloc > Creating block 4
|
|
TRACE regalloc2::ion::fast_alloc > v148 died at the edge, reuse stack slot for v147
|
|
TRACE regalloc2::ion::fast_alloc > Creating block 5
|
|
TRACE regalloc2::ion::fast_alloc > v149 died at the edge, reuse stack slot for v144
|
|
TRACE regalloc2::ion::fast_alloc > v148 died at the edge, reuse stack slot for v145
|
|
TRACE regalloc2::ion::fast_alloc > v136 died at the edge, reuse stack slot for v146
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 5
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 13 (refs_on_stack: false, is_ret: false, is_branch: true, alloc_idx: 13)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 5
|
|
TRACE regalloc2::ion::fast_alloc > Only one allocated successor, moving allocations
|
|
TRACE regalloc2::ion::fast_alloc > Move v144 from slot 5 to slot 2 for v135
|
|
TRACE regalloc2::ion::fast_alloc > Move v145 from slot 6 to slot 3 for v136
|
|
TRACE regalloc2::ion::fast_alloc > Move v146 from slot 3 to slot 4 for v137
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 4
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 12 (refs_on_stack: false, is_ret: false, is_branch: true, alloc_idx: 13)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 4
|
|
TRACE regalloc2::ion::fast_alloc > Successors not allocated. Creating allocation
|
|
TRACE regalloc2::ion::fast_alloc > Creating block 6
|
|
TRACE regalloc2::ion::fast_alloc > v147 died at the edge, reuse stack slot for v143
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 1
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 4 (refs_on_stack: false, is_ret: false, is_branch: true, alloc_idx: 3)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 1
|
|
TRACE regalloc2::ion::fast_alloc > Only one allocated successor, moving allocations
|
|
TRACE regalloc2::ion::fast_alloc > Move v152 from slot 1 to slot 6 for v143
|
|
TRACE regalloc2::ion::fast_alloc > Allocating block 6
|
|
TRACE regalloc2::ion::fast_alloc > Allocating Inst 14 (refs_on_stack: false, is_ret: true, is_branch: false, alloc_idx: 13)
|
|
TRACE regalloc2::ion::fast_alloc > Clobbers:
|
|
TRACE regalloc2::ion::fast_alloc > First alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Use: v143i fixed(p0i)
|
|
TRACE regalloc2::ion::fast_alloc > Chose p0i for operand 0
|
|
TRACE regalloc2::ion::fast_alloc > Second alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Operand 0: Use: v143i fixed(p0i)
|
|
TRACE regalloc2::ion::fast_alloc > Third alloc pass
|
|
TRACE regalloc2::ion::fast_alloc > Clearing p0i
|
|
TRACE regalloc2::ion::fast_alloc > Allocating outgoing blockparams for 6
|
|
TRACE regalloc2::ion::fast_alloc > Last inst 14 is not a branch
|
|
TRACE regalloc2::ion::fast_alloc > Edits:
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint0-post from p7i to stack0
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint1-post from p6i to stack1
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint2-pre from stack0 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint4-pre from stack1 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint4-pre from p6i to stack6
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint5-pre from stack0 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint5-post from p7i to stack2
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint6-post from p6i to stack3
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint7-pre from stack3 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint7-pre from p6i to stack4
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint8-pre from stack2 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint8-post from p7i to stack5
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint9-pre from stack3 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint9-pre from stack4 to p7i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint9-post from p0i to stack6
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint10-pre from stack5 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint10-pre from stack5 to p7i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint13-pre from stack5 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint13-pre from p6i to stack2
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint13-pre from stack6 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint13-pre from p6i to stack3
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint13-pre from stack3 to p6i
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint13-pre from p6i to stack4
|
|
TRACE regalloc2::ion::fast_alloc > At progpoint14-pre from stack6 to p0i
|
|
TRACE regalloc2::ion::fast_alloc > StackMaps:
|
|
DEBUG cranelift_codegen::timing > timing: Ending Register allocation
|
|
DEBUG cranelift_codegen::timing > timing: Starting VCode emission, (during Compilation passes)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: first 7 labels are for blocks
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: next 0 labels are for constants
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(0)
|
|
TRACE cranelift_codegen::machinst::vcode > -> entry block
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 0: 55
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 1: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 2: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 3: e5
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 4: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 5: 83
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 6: ec
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 7: 40
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(0) at offset 8
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = []
|
|
l = [MachLabel(0)]
|
|
f = []
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = []
|
|
l = [MachLabel(0)]
|
|
f = []
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 0
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p7i to slot 0
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 0 } -> sp_off 0
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 8: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 9: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 10: 3c
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 11: 24
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 1
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 12: be
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 13: 1
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 1
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 1 } -> sp_off 8
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 17: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 18: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 19: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 20: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 21: 8
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 0 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 0 } -> sp_off 0
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 22: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 23: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 24: 34
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 25: 24
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 2
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 26: 83
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 27: fe
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 28: 3
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 3
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 31 label MachLabel(1) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 29: f
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 30: 82
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 31: 0
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 36 label MachLabel(2) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 35: e9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 36: 0
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(1)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(1) at offset 40
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 29, end: 35, target: MachLabel(1), fixup: 0, inverted: Some([15, 131, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 35, end: 40, target: MachLabel(2), fixup: 1, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(1)]
|
|
f = [MachLabelFixup { label: MachLabel(1), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(2), offset: 36, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 35, end: 40, target: MachLabel(2), fixup: 1, inverted: None, labels_at_this_branch: [] } at off 40
|
|
TRACE cranelift_codegen::machinst::buffer > -> more than one branch; prev_b = MachBranch { start: 29, end: 35, target: MachLabel(1), fixup: 0, inverted: Some([15, 131, 0, 0, 0, 0]), labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > -> uncond follows a conditional, and conditional's target resolves to current offset
|
|
TRACE cranelift_codegen::machinst::buffer > truncate_last_branch: truncated MachBranch { start: 35, end: 40, target: MachLabel(2), fixup: 1, inverted: None, labels_at_this_branch: [] }; off now 35
|
|
TRACE cranelift_codegen::machinst::buffer > -> reassigning target of condbr to MachLabel(2)
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 29, end: 35, target: MachLabel(2), fixup: 0, inverted: Some([15, 130, 0, 0, 0, 0]), labels_at_this_branch: [] } at off 35
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = [MachBranch { start: 29, end: 35, target: MachLabel(2), fixup: 0, inverted: Some([15, 130, 0, 0, 0, 0]), labels_at_this_branch: [] }]
|
|
l = [MachLabel(1)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 1 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 1 } -> sp_off 8
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 35: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 36: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 37: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 38: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 39: 8
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 6
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 6 } -> sp_off 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 40: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 41: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 42: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 43: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 44: 30
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 4
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 46 label MachLabel(6) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 45: e9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 46: 0
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(2)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(2) at offset 50
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 29, end: 35, target: MachLabel(2), fixup: 0, inverted: Some([15, 130, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 45, end: 50, target: MachLabel(6), fixup: 1, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(2)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 45, end: 50, target: MachLabel(6), fixup: 1, inverted: None, labels_at_this_branch: [] } at off 50
|
|
TRACE cranelift_codegen::machinst::buffer > -> more than one branch; prev_b = MachBranch { start: 29, end: 35, target: MachLabel(2), fixup: 0, inverted: Some([15, 130, 0, 0, 0, 0]), labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = [MachBranch { start: 29, end: 35, target: MachLabel(2), fixup: 0, inverted: Some([15, 130, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 45, end: 50, target: MachLabel(6), fixup: 1, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(2)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 0 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 0 } -> sp_off 0
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 50: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 51: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 52: 34
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 53: 24
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 5
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 54: 8d
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 55: 7e
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 56: fe
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p7i to slot 2
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 2 } -> sp_off 16
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 57: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 58: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 59: 7c
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 60: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 61: 10
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 6
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 62: be
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 63: 1
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 3
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 3 } -> sp_off 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 67: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 68: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 69: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 70: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 71: 18
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 3 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 3 } -> sp_off 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 72: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 73: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 74: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 75: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 76: 18
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 4
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 4 } -> sp_off 32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 77: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 78: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 79: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 80: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 81: 20
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 7
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 83 label MachLabel(3) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 82: e9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 83: 0
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(3)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(3) at offset 87
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 29, end: 35, target: MachLabel(2), fixup: 0, inverted: Some([15, 130, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 45, end: 50, target: MachLabel(6), fixup: 1, inverted: None, labels_at_this_branch: [] }, MachBranch { start: 82, end: 87, target: MachLabel(3), fixup: 2, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(3)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(3), offset: 83, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 82, end: 87, target: MachLabel(3), fixup: 2, inverted: None, labels_at_this_branch: [] } at off 87
|
|
TRACE cranelift_codegen::machinst::buffer > branch with target == cur off; truncating
|
|
TRACE cranelift_codegen::machinst::buffer > truncate_last_branch: truncated MachBranch { start: 82, end: 87, target: MachLabel(3), fixup: 2, inverted: None, labels_at_this_branch: [] }; off now 82
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 45, end: 50, target: MachLabel(6), fixup: 1, inverted: None, labels_at_this_branch: [] } at off 82
|
|
TRACE cranelift_codegen::machinst::buffer > purge_latest_branches: removing branch MachBranch { start: 45, end: 50, target: MachLabel(6), fixup: 1, inverted: None, labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = []
|
|
l = [MachLabel(3)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 2 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 2 } -> sp_off 16
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 82: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 83: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 84: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 85: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 86: 10
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 8
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 87: 8d
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 88: 7e
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 89: ff
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p7i to slot 5
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 5 } -> sp_off 40
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 90: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 91: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 92: 7c
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 93: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 94: 28
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 3 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 3 } -> sp_off 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 95: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 96: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 97: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 98: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 99: 18
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 4 to p7i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 4 } -> sp_off 32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 100: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 101: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 102: 7c
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 103: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 104: 20
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 105: 8d
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 106: 44
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 107: 3e
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 108: 0
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p0i to slot 6
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 6 } -> sp_off 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 109: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 110: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 111: 44
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 112: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 113: 30
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 5 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 5 } -> sp_off 40
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 114: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 115: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 116: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 117: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 118: 28
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 5 to p7i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 5 } -> sp_off 40
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 119: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 120: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 121: 7c
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 122: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 123: 28
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 10
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 124: 85
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 125: fe
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 11
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 128 label MachLabel(4) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 126: f
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 127: 84
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 128: 0
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 133 label MachLabel(5) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 132: e9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 133: 0
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(4)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(4) at offset 137
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(4), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 132, end: 137, target: MachLabel(5), fixup: 3, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(4)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(4), offset: 128, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(5), offset: 133, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 132, end: 137, target: MachLabel(5), fixup: 3, inverted: None, labels_at_this_branch: [] } at off 137
|
|
TRACE cranelift_codegen::machinst::buffer > -> more than one branch; prev_b = MachBranch { start: 126, end: 132, target: MachLabel(4), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > -> uncond follows a conditional, and conditional's target resolves to current offset
|
|
TRACE cranelift_codegen::machinst::buffer > truncate_last_branch: truncated MachBranch { start: 132, end: 137, target: MachLabel(5), fixup: 3, inverted: None, labels_at_this_branch: [] }; off now 132
|
|
TRACE cranelift_codegen::machinst::buffer > -> reassigning target of condbr to MachLabel(5)
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 126, end: 132, target: MachLabel(5), fixup: 2, inverted: Some([15, 132, 0, 0, 0, 0]), labels_at_this_branch: [] } at off 132
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(5), fixup: 2, inverted: Some([15, 132, 0, 0, 0, 0]), labels_at_this_branch: [] }]
|
|
l = [MachLabel(4)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(5), offset: 128, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 12
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 133 label MachLabel(6) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 132: e9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 133: 0
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(5)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(5) at offset 137
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(5), fixup: 2, inverted: Some([15, 132, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 132, end: 137, target: MachLabel(6), fixup: 3, inverted: None, labels_at_this_branch: [MachLabel(4)] }]
|
|
l = [MachLabel(5)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(5), offset: 128, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 133, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 132, end: 137, target: MachLabel(6), fixup: 3, inverted: None, labels_at_this_branch: [MachLabel(4)] } at off 137
|
|
TRACE cranelift_codegen::machinst::buffer > -> label at start of branch MachLabel(4) redirected to target MachLabel(6)
|
|
TRACE cranelift_codegen::machinst::buffer > -> after label redirects, restarting loop
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 132, end: 137, target: MachLabel(6), fixup: 3, inverted: None, labels_at_this_branch: [] } at off 137
|
|
TRACE cranelift_codegen::machinst::buffer > -> more than one branch; prev_b = MachBranch { start: 126, end: 132, target: MachLabel(5), fixup: 2, inverted: Some([15, 132, 0, 0, 0, 0]), labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > -> uncond follows a conditional, and conditional's target resolves to current offset
|
|
TRACE cranelift_codegen::machinst::buffer > truncate_last_branch: truncated MachBranch { start: 132, end: 137, target: MachLabel(6), fixup: 3, inverted: None, labels_at_this_branch: [] }; off now 132
|
|
TRACE cranelift_codegen::machinst::buffer > -> reassigning target of condbr to MachLabel(6)
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 126, end: 132, target: MachLabel(6), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] } at off 132
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(6), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }]
|
|
l = [MachLabel(5)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 128, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 5 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 5 } -> sp_off 40
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 132: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 133: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 134: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 135: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 136: 28
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 2
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 2 } -> sp_off 16
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 137: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 138: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 139: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 140: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 141: 10
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 6 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 6 } -> sp_off 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 142: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 143: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 144: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 145: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 146: 30
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 3
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 3 } -> sp_off 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 147: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 148: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 149: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 150: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 151: 18
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 3 to p6i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 3 } -> sp_off 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 152: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 153: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 154: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 155: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 156: 18
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from p6i to slot 4
|
|
TRACE cranelift_codegen::machinst::abi > store_spillslot: slot SpillSlot { bits: 4 } -> sp_off 32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 157: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 158: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 159: 74
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 160: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 161: 20
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 13
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: use_label_at_offset: offset 163 label MachLabel(3) kind JmpRel32
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 162: e9
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put 32-bit word @ 163: 0
|
|
TRACE cranelift_codegen::machinst::vcode > emitting block Block(6)
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: bind label MachLabel(6) at offset 167
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(6), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 162, end: 167, target: MachLabel(3), fixup: 3, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(6)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 128, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(3), offset: 163, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 162, end: 167, target: MachLabel(3), fixup: 3, inverted: None, labels_at_this_branch: [] } at off 167
|
|
TRACE cranelift_codegen::machinst::buffer > -> more than one branch; prev_b = MachBranch { start: 126, end: 132, target: MachLabel(6), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(6), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 162, end: 167, target: MachLabel(3), fixup: 3, inverted: None, labels_at_this_branch: [] }]
|
|
l = [MachLabel(6)]
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 128, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(3), offset: 163, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting move from slot 6 to p0i
|
|
TRACE cranelift_codegen::machinst::abi > load_spillslot: slot SpillSlot { bits: 6 } -> sp_off 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 167: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 168: 8b
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 169: 44
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 170: 24
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 171: 30
|
|
TRACE cranelift_codegen::machinst::vcode > Emitting inst 14
|
|
TRACE cranelift_codegen::machinst::abi > Epilogue: [addq %rsp, $64, %rsp, movq %rbp, %rsp, popq %rbp, ret]
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 172: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 173: 83
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 174: c4
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 175: 40
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 176: 48
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 177: 89
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 178: ec
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 179: 5d
|
|
TRACE cranelift_codegen::machinst::buffer > MachBuffer: put byte @ 180: c3
|
|
TRACE cranelift_codegen::machinst::vcode > Disassembly:
|
|
pushq %rbp
|
|
unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
|
movq %rsp, %rbp
|
|
unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
|
subq %rsp, $64, %rsp
|
|
block0:
|
|
movq %rdi, rsp(0 + virtual offset)
|
|
movl $1, %esi
|
|
movq %rsi, rsp(8 + virtual offset)
|
|
movq rsp(0 + virtual offset), %rsi
|
|
cmpl $3, %esi
|
|
jb label1; j label2
|
|
block1:
|
|
movq rsp(8 + virtual offset), %rsi
|
|
movq %rsi, rsp(48 + virtual offset)
|
|
jmp label6
|
|
block2:
|
|
movq rsp(0 + virtual offset), %rsi
|
|
lea -2(%rsi), %edi
|
|
movq %rdi, rsp(16 + virtual offset)
|
|
movl $1, %esi
|
|
movq %rsi, rsp(24 + virtual offset)
|
|
movq rsp(24 + virtual offset), %rsi
|
|
movq %rsi, rsp(32 + virtual offset)
|
|
jmp label3
|
|
block3:
|
|
movq rsp(16 + virtual offset), %rsi
|
|
lea -1(%rsi), %edi
|
|
movq %rdi, rsp(40 + virtual offset)
|
|
movq rsp(24 + virtual offset), %rsi
|
|
movq rsp(32 + virtual offset), %rdi
|
|
lea 0(%rsi,%rdi,1), %eax
|
|
movq %rax, rsp(48 + virtual offset)
|
|
movq rsp(40 + virtual offset), %rsi
|
|
movq rsp(40 + virtual offset), %rdi
|
|
testl %edi, %esi
|
|
jz label4; j label5
|
|
block4:
|
|
jmp label6
|
|
block5:
|
|
movq rsp(40 + virtual offset), %rsi
|
|
movq %rsi, rsp(16 + virtual offset)
|
|
movq rsp(48 + virtual offset), %rsi
|
|
movq %rsi, rsp(24 + virtual offset)
|
|
movq rsp(24 + virtual offset), %rsi
|
|
movq %rsi, rsp(32 + virtual offset)
|
|
jmp label3
|
|
block6:
|
|
movq rsp(48 + virtual offset), %rax
|
|
addq %rsp, $64, %rsp
|
|
movq %rbp, %rsp
|
|
popq %rbp
|
|
ret
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Ending VCode emission
|
|
DEBUG cranelift_codegen::timing > timing: Starting VCode emission finalization, (during Compilation passes)
|
|
TRACE cranelift_codegen::machinst::buffer > enter optimize_branches:
|
|
b = [MachBranch { start: 126, end: 132, target: MachLabel(6), fixup: 2, inverted: Some([15, 133, 0, 0, 0, 0]), labels_at_this_branch: [] }, MachBranch { start: 162, end: 167, target: MachLabel(3), fixup: 3, inverted: None, labels_at_this_branch: [] }]
|
|
l = []
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 128, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(3), offset: 163, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > optimize_branches: last branch MachBranch { start: 162, end: 167, target: MachLabel(3), fixup: 3, inverted: None, labels_at_this_branch: [] } at off 181
|
|
TRACE cranelift_codegen::machinst::buffer > purge_latest_branches: removing branch MachBranch { start: 162, end: 167, target: MachLabel(3), fixup: 3, inverted: None, labels_at_this_branch: [] }
|
|
TRACE cranelift_codegen::machinst::buffer > leave optimize_branches:
|
|
b = []
|
|
l = []
|
|
f = [MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(6), offset: 128, kind: JmpRel32 }, MachLabelFixup { label: MachLabel(3), offset: 163, kind: JmpRel32 }]
|
|
TRACE cranelift_codegen::machinst::buffer > emit_island: fixup MachLabelFixup { label: MachLabel(2), offset: 31, kind: JmpRel32 }
|
|
TRACE cranelift_codegen::machinst::buffer > -> label_offset = 50, known, required = false (pos 2147483647 neg 2147483648)
|
|
TRACE cranelift_codegen::machinst::buffer > patching in-range!
|
|
TRACE cranelift_codegen::machinst::buffer > emit_island: fixup MachLabelFixup { label: MachLabel(6), offset: 46, kind: JmpRel32 }
|
|
TRACE cranelift_codegen::machinst::buffer > -> label_offset = 167, known, required = false (pos 2147483647 neg 2147483648)
|
|
TRACE cranelift_codegen::machinst::buffer > patching in-range!
|
|
TRACE cranelift_codegen::machinst::buffer > emit_island: fixup MachLabelFixup { label: MachLabel(6), offset: 128, kind: JmpRel32 }
|
|
TRACE cranelift_codegen::machinst::buffer > -> label_offset = 167, known, required = false (pos 2147483647 neg 2147483648)
|
|
TRACE cranelift_codegen::machinst::buffer > patching in-range!
|
|
TRACE cranelift_codegen::machinst::buffer > emit_island: fixup MachLabelFixup { label: MachLabel(3), offset: 163, kind: JmpRel32 }
|
|
TRACE cranelift_codegen::machinst::buffer > -> label_offset = 82, known, required = false (pos 2147483647 neg 2147483648)
|
|
TRACE cranelift_codegen::machinst::buffer > patching in-range!
|
|
DEBUG cranelift_codegen::timing > timing: Ending VCode emission finalization
|
|
TRACE cranelift_codegen::isa::x64 > disassembly:
|
|
pushq %rbp
|
|
unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
|
|
movq %rsp, %rbp
|
|
unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 }
|
|
subq %rsp, $64, %rsp
|
|
block0:
|
|
movq %rdi, rsp(0 + virtual offset)
|
|
movl $1, %esi
|
|
movq %rsi, rsp(8 + virtual offset)
|
|
movq rsp(0 + virtual offset), %rsi
|
|
cmpl $3, %esi
|
|
jb label1; j label2
|
|
block1:
|
|
movq rsp(8 + virtual offset), %rsi
|
|
movq %rsi, rsp(48 + virtual offset)
|
|
jmp label6
|
|
block2:
|
|
movq rsp(0 + virtual offset), %rsi
|
|
lea -2(%rsi), %edi
|
|
movq %rdi, rsp(16 + virtual offset)
|
|
movl $1, %esi
|
|
movq %rsi, rsp(24 + virtual offset)
|
|
movq rsp(24 + virtual offset), %rsi
|
|
movq %rsi, rsp(32 + virtual offset)
|
|
jmp label3
|
|
block3:
|
|
movq rsp(16 + virtual offset), %rsi
|
|
lea -1(%rsi), %edi
|
|
movq %rdi, rsp(40 + virtual offset)
|
|
movq rsp(24 + virtual offset), %rsi
|
|
movq rsp(32 + virtual offset), %rdi
|
|
lea 0(%rsi,%rdi,1), %eax
|
|
movq %rax, rsp(48 + virtual offset)
|
|
movq rsp(40 + virtual offset), %rsi
|
|
movq rsp(40 + virtual offset), %rdi
|
|
testl %edi, %esi
|
|
jz label4; j label5
|
|
block4:
|
|
jmp label6
|
|
block5:
|
|
movq rsp(40 + virtual offset), %rsi
|
|
movq %rsi, rsp(16 + virtual offset)
|
|
movq rsp(48 + virtual offset), %rsi
|
|
movq %rsi, rsp(24 + virtual offset)
|
|
movq rsp(24 + virtual offset), %rsi
|
|
movq %rsi, rsp(32 + virtual offset)
|
|
jmp label3
|
|
block6:
|
|
movq rsp(48 + virtual offset), %rax
|
|
addq %rsp, $64, %rsp
|
|
movq %rbp, %rsp
|
|
popq %rbp
|
|
ret
|
|
|
|
DEBUG cranelift_codegen::timing > timing: Ending Compilation passes
|