When the last insn1 of BB1 and the first insn2 of BB2 are fusion, insn2 will clear all dependencies in the function chain_to_prev_insn, resulting in insn2 may mov to any BB, and the program calculation result is wrong.
gcc/ChangeLog: * sched-deps.cc (sched_macro_fuse_insns): Insns should not be fusion in different BB blocks --- gcc/sched-deps.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/sched-deps.cc b/gcc/sched-deps.cc index 2aa6623ad2e..998fe930804 100644 --- a/gcc/sched-deps.cc +++ b/gcc/sched-deps.cc @@ -2833,7 +2833,7 @@ sched_macro_fuse_insns (rtx_insn *insn) compile time complexity. */ if (DEBUG_INSN_P (insn)) return; - prev = prev_nonnote_nondebug_insn (insn); + prev = prev_nonnote_nondebug_insn_bb (insn); if (!prev) return; -- 2.17.1