test licm function %other_side_effects(i32) -> i32 { ebb0(v0: i32): jump ebb1(v0) ebb1(v1: i32): regmove.i32 v0, %10 -> %20 ; check: ebb1(v1: i32): ; check: regmove.i32 v0, %10 -> %20 v2 = iconst.i32 1 brz v1, ebb2(v1) v5 = isub v1, v2 jump ebb1(v5) ebb2(v6: i32): return v6 } function %cpu_flags(i32, i32) -> i32 { ebb0(v0: i32, v1: i32): jump ebb1(v0, v1) ebb1(v2: i32, v3: i32): v4 = ifcmp.i32 v0, v1 v5 = selectif.i32 eq v4, v2, v3 ; check: ebb1(v2: i32, v3: i32): ; check: ifcmp.i32 v0, v1 ; check: v5 = selectif.i32 eq v4, v2, v3 v8 = iconst.i32 1 brz v1, ebb2(v1) v9 = isub v1, v8 v10 = iadd v1, v8 jump ebb1(v9, v10) ebb2(v6: i32): return v6 } function %spill(i32, i32) -> i32 { ebb0(v0: i32, v1: i32): v2 = spill.i32 v0 jump ebb1(v0, v1) ebb1(v3: i32, v4: i32): v5 = spill.i32 v1 v6 = fill.i32 v2 v7 = fill.i32 v5 ; check: ebb1(v3: i32, v4: i32): ; check: v5 = spill.i32 v1 ; check: v6 = fill.i32 v2 ; check: v7 = fill v5 brz v1, ebb2(v1) v9 = isub v1, v4 jump ebb1(v9, v3) ebb2(v10: i32): return v10 } function %non_invariant_aliases(i32) -> i32 { ebb0(v0: i32): jump ebb1(v0) ebb1(v1: i32): v8 -> v1 v9 -> v1 v2 = iadd v8, v9 ; check: ebb1(v1: i32): ; check: v2 = iadd v8, v9 brz v1, ebb2(v1) v5 = isub v1, v2 jump ebb1(v5) ebb2(v6: i32): return v6 }