Commit 179ba6b8 by Hariharan Sandanagobalane Committed by Hariharan Sandanagobalane

re PR target/45299 (Dwarf information is wrong with optimised code.)

        * config/picochip/picochip.c (reorder_var_tracking_notes): This
          function was dropping debug insns which caused PR45299.

From-SVN: r163617
parent ee9dd92e
2010-08-28 Uros Bizjak <ubizjak@gmail.com> 2010-08-28 Hariharan Sandanagobalane <hariharan@picochip.com>
* config/picochip/picochip.c (reorder_var_tracking_notes): This
function was dropping debug insns which caused PR45299.
2010-08-28 Uros Bizjak <ubizjak@gmail.com>
* config/i386/sse.md (extsuffix): New code attribute. * config/i386/sse.md (extsuffix): New code attribute.
(sse4_1_<code>v8qiv8hi2): Macroize insn from sse4_1_extendv8qiv8hi2 (sse4_1_<code>v8qiv8hi2): Macroize insn from sse4_1_extendv8qiv8hi2
and sse4_1_zero_extendv8qiv8hi2 using any_extend code iterator. and sse4_1_zero_extendv8qiv8hi2 using any_extend code iterator.
......
...@@ -3138,40 +3138,68 @@ static void ...@@ -3138,40 +3138,68 @@ static void
reorder_var_tracking_notes (void) reorder_var_tracking_notes (void)
{ {
basic_block bb; basic_block bb;
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
rtx insn, next; rtx insn, next, last_insn = NULL_RTX;
rtx vliw_start = NULL_RTX;
rtx queue = NULL_RTX; rtx queue = NULL_RTX;
for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = next) /* Iterate through the bb and find the last non-debug insn */
{ for (insn = BB_HEAD (bb); insn != NEXT_INSN(BB_END (bb)); insn = NEXT_INSN(insn))
next = NEXT_INSN (insn); {
if (NONDEBUG_INSN_P(insn))
last_insn = insn;
}
if (NONDEBUG_INSN_P (insn)) /* In all normal cases, queue up notes and emit them just before a TImode
{ instruction. For the last instruction, emit the queued notes just after
/* Emit queued up notes before the first instruction of a bundle. */ the last instruction. */
if (GET_MODE (insn) == TImode) for (insn = BB_HEAD (bb); insn != NEXT_INSN(BB_END (bb)); insn = next)
{ {
while (queue) next = NEXT_INSN (insn);
{
rtx next_queue = PREV_INSN (queue); if (insn == last_insn)
NEXT_INSN (PREV_INSN(insn)) = queue; {
PREV_INSN (queue) = PREV_INSN(insn); while (queue)
PREV_INSN (insn) = queue; {
NEXT_INSN (queue) = insn; rtx next_queue = PREV_INSN (queue);
queue = next_queue; PREV_INSN (NEXT_INSN(insn)) = queue;
} NEXT_INSN(queue) = NEXT_INSN(insn);
} PREV_INSN(queue) = insn;
} NEXT_INSN(insn) = queue;
else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION) queue = next_queue;
{ }
rtx prev = PREV_INSN (insn); /* There is no more to do for this bb. break*/
PREV_INSN (next) = prev; break;
NEXT_INSN (prev) = next; }
else if (NONDEBUG_INSN_P (insn))
{
/* Emit queued up notes before the first instruction of a bundle. */
if (GET_MODE (insn) == TImode)
{
while (queue)
{
rtx next_queue = PREV_INSN (queue);
NEXT_INSN (PREV_INSN(insn)) = queue;
PREV_INSN (queue) = PREV_INSN(insn);
PREV_INSN (insn) = queue;
NEXT_INSN (queue) = insn;
queue = next_queue;
}
}
}
else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
{
rtx prev = PREV_INSN (insn);
PREV_INSN (next) = prev;
NEXT_INSN (prev) = next;
PREV_INSN (insn) = queue; PREV_INSN (insn) = queue;
queue = insn; queue = insn;
} }
} }
/* Make sure we are not dropping debug instructions.*/
gcc_assert (queue == NULL_RTX);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment