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 ) 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 ) 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 } }, BlockCall { values: EntityList { index: 21, unused: PhantomData } }] }) 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 } } }) 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 } }, BlockCall { values: EntityList { index: 65, unused: PhantomData } }] }) 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 } }) 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 } }) 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 } } 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 } }, BlockCall { values: EntityList { index: 65, unused: PhantomData } }] }) 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 } } }) 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 } }, BlockCall { values: EntityList { index: 21, unused: PhantomData } }] }) 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