test licm target riscv32 ; The loop in this function is entered from a critical edge. function %critical_edge(i32, i32) -> i32 { ebb0(v0: i32, v7: i32): [SBzero#38] brnz v7, ebb2(v0) [UJ#1b] jump ebb1 ebb1: [Iret#19] return v0 ebb2(v1: i32): v2 = iconst.i32 1 v3 = iconst.i32 2 v4 = iadd v2, v3 [SBzero#18] brz v1, ebb4(v1) [UJ#1b] jump ebb3 ebb3: v5 = isub v1, v2 [UJ#1b] jump ebb2(v5) ebb4(v6: i32): [Iret#19] return v6 } ; sameln: function %critical_edge ; nextln: ebb0(v0: i32, v7: i32): ; nextln: brnz v7, ebb5(v0) ; nextln: jump ebb1 ; nextln: ; nextln: ebb1: ; nextln: return v0 ; nextln: ; nextln: ebb5(v8: i32): ; nextln: v2 = iconst.i32 1 ; nextln: v3 = iconst.i32 2 ; nextln: v4 = iadd v2, v3 ; nextln: jump ebb2(v8) ; nextln: ; nextln: ebb2(v1: i32): ; nextln: brz v1, ebb4(v1) ; nextln: jump ebb3 ; nextln: ; nextln: ebb3: ; nextln: v5 = isub.i32 v1, v2 ; nextln: jump ebb2(v5) ; nextln: ; nextln: ebb4(v6: i32): ; nextln: return v6 ; nextln: }