This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: debug insns in SMS


On May  4, 2011, Revital1 Eres <ERES@il.ibm.com> wrote:

> Hello Alexandre
>> I think this will restore proper functioning to SMS in the presence of
>> debug insns.  A while ago, we'd never generate deps of non-debug insns
>> on debug insns.  I introduced them to enable sched to adjust (reset)
>> debug insns when non-debug insns were moved before them.  I believe it
>> is safe to leave them out of the SCCs.  Even though this will end up
>> causing some loss of debug info, that's probably unavoidable, and the
>> end result after this change is pobably the best we can hope for.  Your
>> thoughts?

> Thanks for the patch!

> I actually discussed this issue with Ayal yesterday.
> Ayal also suggested to reconsider the edges that are created in
> the DDG between real instructions and debug_insns. Currently, we create
> bidirectional anti deps edges between them. This leads to the problem you
> were trying to solve in the current patch (described below) where these
> extra edges influence the construction of the strongly connected component
> and the code generated with and w\o -g. Your patch seems to solve this
> problem.
> However I can not approve it as I'm not the maintainer (Ayal is).

Ping?

(Retested on x86_64-linux-gnu and i686-pc-linux-gnu)

for  gcc/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	* ddg.c (build_intra_loop_deps): Discard deps of nondebug on debug.

Index: gcc/ddg.c
===================================================================
--- gcc/ddg.c.orig	2012-01-04 21:06:38.000000000 -0200
+++ gcc/ddg.c	2012-04-08 02:10:44.711511989 -0300
@@ -532,7 +532,12 @@ build_intra_loop_deps (ddg_ptr g)
 
       FOR_EACH_DEP (dest_node->insn, SD_LIST_BACK, sd_it, dep)
 	{
-	  ddg_node_ptr src_node = get_node_of_insn (g, DEP_PRO (dep));
+	  ddg_node_ptr src_node;
+
+	  if (DEBUG_INSN_P (DEP_PRO (dep)) && !DEBUG_INSN_P (dest_node->insn))
+	    continue;
+
+	  src_node = get_node_of_insn (g, DEP_PRO (dep));
 
 	  if (!src_node)
 	    continue;

-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]