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]

valgrind fix: Set not_replacable in loop.c


Bootstrapping GCC with valgrind shows these:

stage2/xgcc -Bstage2/ -B/opt/gcc/3.3-devel/i686-pc-linux-gnu/bin/ -c   -DVALGRIND_PATH=\"/opt/valgrind/bin/valgrind\" -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes  -fno-common  -DHAVE_CONFIG_H    -I. -Ijava -I/cvs/gcc/gcc -I/cvs/gcc/gcc/java -I/cvs/gcc/gcc/config -I/cvs/gcc/gcc/../include /cvs/gcc/gcc/java/jvgenmain.c -o java/jvgenmain.o
==23127== Conditional jump or move depends on uninitialised value(s)
==23127==    at 0x83DFF28: loop_givs_check (/cvs/gcc/gcc/loop.c:4599)
==23127==    by 0x83E0D33: strength_reduce (/cvs/gcc/gcc/loop.c:5126)
==23127==    by 0x83CDB9B: scan_loop (/cvs/gcc/gcc/loop.c:1173)
==23127==    by 0x83CD4E3: loop_optimize (/cvs/gcc/gcc/loop.c:472)

The problem is that we do not set not_replacable in all cases.

I'm currently testing the appended patch.  Ok to commit if
bootstrapping succeeds on i686-linux-gnu?

Andreas

2002-11-19  Andreas Jaeger  <aj@suse.de>

	* loop.c (record_giv): Initialize not_replaceable.
	(check_final_value): Likewise.

============================================================
Index: gcc/loop.c
--- gcc/loop.c	4 Nov 2002 20:06:28 -0000	1.431
+++ gcc/loop.c	19 Nov 2002 05:54:40 -0000
@@ -5835,7 +5835,10 @@ record_giv (loop, v, insn, src_reg, dest
     abort ();
 
   if (type == DEST_ADDR)
-    v->replaceable = 1;
+    {
+      v->replaceable = 1;
+      v->not_replaceable = 0;
+    }
   else
     {
       /* The giv can be replaced outright by the reduced register only if all
@@ -5870,6 +5873,7 @@ record_giv (loop, v, insn, src_reg, dest
 	     using this biv anyways.  */
 
 	  v->replaceable = 1;
+	  v->not_replaceable = 0;
 	  for (b = bl->biv; b; b = b->next_iv)
 	    {
 	      if (INSN_UID (b->insn) >= max_uid_for_loop
@@ -5981,6 +5985,7 @@ check_final_value (loop, v)
       rtx last_giv_use;
 
       v->replaceable = 1;
+      v->not_replaceable = 0;
 
       /* When trying to determine whether or not a biv increment occurs
 	 during the lifetime of the giv, we can ignore uses of the variable

-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj


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