This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[vta,vta4.3] inherit locator from neighboring non-debug insn
- From: Alexandre Oliva <aoliva at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 10 Sep 2008 05:28:17 -0300
- Subject: [vta,vta4.3] inherit locator from neighboring non-debug insn
Yet another nearly-meaningless difference detected with
-fcompare-debug. When a pattern is emitted as an insn before or after
an existing insn, without an explicit locator, the locator is
inherited from the existing insn.
The existence of debug insns, and their use as reference insn, causes
the newly-emitted insns to inherit the locator of the debug insn,
rather than that of the insn it would have otherwise inherited.
Rather than prohibiting debug insns from being used as references, and
requiring all callers to avoid making such calls, it was much simpler
to factor the changes they'd require into the emit_*{after,before}
functions, taking the locator from the closest non-debug insn in the
opposite direction.
for gcc/ChangeLog.vta
from Alexandre Oliva <aoliva@redhat.com>
* emit-rtl (emit_insn_after, emit_jump_insn_after,
emit_call_insn_after, emit_insn_before, emit_jump_insn_before,
emit_call_insn_before): Take locator from non-debug insn.
Index: gcc/emit-rtl.c
===================================================================
--- gcc/emit-rtl.c.orig 2008-09-05 03:09:19.000000000 -0300
+++ gcc/emit-rtl.c 2008-09-05 03:09:56.000000000 -0300
@@ -4321,8 +4321,13 @@ emit_insn_after_setloc (rtx pattern, rtx
rtx
emit_insn_after (rtx pattern, rtx after)
{
- if (INSN_P (after))
- return emit_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
+ rtx prev = after;
+
+ while (DEBUG_INSN_P (prev))
+ prev = PREV_INSN (prev);
+
+ if (INSN_P (prev))
+ return emit_insn_after_setloc (pattern, after, INSN_LOCATOR (prev));
else
return emit_insn_after_noloc (pattern, after, NULL);
}
@@ -4352,8 +4357,13 @@ emit_jump_insn_after_setloc (rtx pattern
rtx
emit_jump_insn_after (rtx pattern, rtx after)
{
- if (INSN_P (after))
- return emit_jump_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
+ rtx prev = after;
+
+ while (DEBUG_INSN_P (prev))
+ prev = PREV_INSN (prev);
+
+ if (INSN_P (prev))
+ return emit_jump_insn_after_setloc (pattern, after, INSN_LOCATOR (prev));
else
return emit_jump_insn_after_noloc (pattern, after);
}
@@ -4383,8 +4393,13 @@ emit_call_insn_after_setloc (rtx pattern
rtx
emit_call_insn_after (rtx pattern, rtx after)
{
- if (INSN_P (after))
- return emit_call_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
+ rtx prev = after;
+
+ while (DEBUG_INSN_P (prev))
+ prev = PREV_INSN (prev);
+
+ if (INSN_P (prev))
+ return emit_call_insn_after_setloc (pattern, after, INSN_LOCATOR (prev));
else
return emit_call_insn_after_noloc (pattern, after);
}
@@ -4449,8 +4464,13 @@ emit_insn_before_setloc (rtx pattern, rt
rtx
emit_insn_before (rtx pattern, rtx before)
{
- if (INSN_P (before))
- return emit_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
+ rtx next = before;
+
+ while (DEBUG_INSN_P (next))
+ next = PREV_INSN (next);
+
+ if (INSN_P (next))
+ return emit_insn_before_setloc (pattern, before, INSN_LOCATOR (next));
else
return emit_insn_before_noloc (pattern, before, NULL);
}
@@ -4481,8 +4501,13 @@ emit_jump_insn_before_setloc (rtx patter
rtx
emit_jump_insn_before (rtx pattern, rtx before)
{
- if (INSN_P (before))
- return emit_jump_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
+ rtx next = before;
+
+ while (DEBUG_INSN_P (next))
+ next = PREV_INSN (next);
+
+ if (INSN_P (next))
+ return emit_jump_insn_before_setloc (pattern, before, INSN_LOCATOR (next));
else
return emit_jump_insn_before_noloc (pattern, before);
}
@@ -4514,8 +4539,13 @@ emit_call_insn_before_setloc (rtx patter
rtx
emit_call_insn_before (rtx pattern, rtx before)
{
- if (INSN_P (before))
- return emit_call_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
+ rtx next = before;
+
+ while (DEBUG_INSN_P (next))
+ next = PREV_INSN (next);
+
+ if (INSN_P (next))
+ return emit_call_insn_before_setloc (pattern, before, INSN_LOCATOR (next));
else
return emit_call_insn_before_noloc (pattern, before);
}
--
Alexandre Oliva http://www.lsd.ic.unicamp.br/~oliva/
Free Software Evangelist oliva@{lsd.ic.unicamp.br, gnu.org}
FSFLA Board Member ÂSÃ Libre! => http://www.fsfla.org/
Red Hat Compiler Engineer aoliva@{redhat.com, gcc.gnu.org}