[PATCH] fixed two issues in handling debug_insn.
Bingfeng Mei
bmei@broadcom.com
Fri Jul 16 12:15:00 GMT 2010
Hello,
I fixed two issues in handling debug_insn. The first is in ddg.c.
Number of nodes should exclude those of debug_insns to determine
whether a loop is a empty one.
The second is in loop-doloop.c. The original code checks validity
of the previous instruction, but will fail if the previous instruction(s)
is debug_insn.
Both issues were found on our private port with our modulo scheduler.
I didn't try to reproduce for other targets since they are obvious.
I tested the patch on x86_64, which passed tests and is bootstrapped.
OK for trunk? (maybe 4.5 too?)
Cheers,
Bingfeng
2010-07-16 Bingfeng Mei <bmei@broadcom.com>
* ddg.c (create_ddg): Exclude nodes of debug_insn in counting nodes
of a loop.
* loop-doloop.c (doloop_condition_get): Skip possible debug_insn.
Index: ddg.c
===================================================================
--- ddg.c (revision 162258)
+++ ddg.c (working copy)
@@ -488,7 +488,7 @@
}
/* There is nothing to do for this BB. */
- if (num_nodes <= 1)
+ if ((num_nodes - g->num_debug) <= 1)
{
free (g);
return NULL;
Index: loop-doloop.c
===================================================================
--- loop-doloop.c (revision 162258)
+++ loop-doloop.c (working copy)
@@ -104,11 +104,15 @@
if (GET_CODE (pattern) != PARALLEL)
{
rtx cond;
+ rtx prev_insn = PREV_INSN (doloop_pat);
- /* We expect the decrement to immediately precede the branch. */
+ /* We expect the decrement to immediately precede the branch.
+ Need to skip possible debug_insn */
+ while (prev_insn != NULL_RTX && DEBUG_INSN_P (prev_insn))
+ prev_insn = PREV_INSN (prev_insn);
- if ((PREV_INSN (doloop_pat) == NULL_RTX)
- || !INSN_P (PREV_INSN (doloop_pat)))
+ if ((prev_insn == NULL_RTX)
+ || !INSN_P (prev_insn))
return 0;
cmp = pattern;
More information about the Gcc-patches
mailing list