gimplify.c (lookup_tmp_var): Separate temporaries when not optimizing.
authorGeoffrey Keating <geoffk@apple.com>
Wed, 25 Aug 2004 18:11:12 +0000 (18:11 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Wed, 25 Aug 2004 18:11:12 +0000 (18:11 +0000)
* gimplify.c (lookup_tmp_var): Separate temporaries when not
optimizing.

From-SVN: r86563

gcc/ChangeLog
gcc/gimplify.c

index 1bff6fd98e7f25c0687bb9841669d2c0fee64838..d4eac297d3a3cfb2083e09c019dffabe5395dfed 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-24  Geoffrey Keating  <geoffk@apple.com>
+
+       * gimplify.c (lookup_tmp_var): Separate temporaries when not
+       optimizing.
+
 2004-08-25  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        PR libstdc++/17005 (fix for HP-UX 11.11)
index b008a17375c2a273f96728b3ed385121e90d5e03..323df36177339b7e94665dce0e1a16847ccb546a 100644 (file)
@@ -117,8 +117,11 @@ push_gimplify_context (void)
     abort ();
   gimplify_ctxp
     = (struct gimplify_ctx *) xcalloc (1, sizeof (struct gimplify_ctx));
-  gimplify_ctxp->temp_htab
-    = htab_create (1000, gimple_tree_hash, gimple_tree_eq, free);
+  if (optimize)
+    gimplify_ctxp->temp_htab
+      = htab_create (1000, gimple_tree_hash, gimple_tree_eq, free);
+  else
+    gimplify_ctxp->temp_htab = NULL;
 }
 
 /* Tear down a context for the gimplifier.  If BODY is non-null, then
@@ -142,12 +145,13 @@ pop_gimplify_context (tree body)
     record_vars (gimplify_ctxp->temps);
 
 #if 0
-  if (!quiet_flag)
+  if (!quiet_flag && optimize)
     fprintf (stderr, " collisions: %f ",
             htab_collisions (gimplify_ctxp->temp_htab));
 #endif
 
-  htab_delete (gimplify_ctxp->temp_htab);
+  if (optimize)
+    htab_delete (gimplify_ctxp->temp_htab);
   free (gimplify_ctxp);
   gimplify_ctxp = NULL;
 }
@@ -409,7 +413,12 @@ lookup_tmp_var (tree val, bool is_formal)
 {
   tree ret;
 
-  if (!is_formal || TREE_SIDE_EFFECTS (val))
+  /* If not optimizing, never really reuse a temporary.  local-alloc
+     won't allocate any variable that is used in more than one basic
+     block, which means it will go into memory, causing much extra
+     work in reload and final and poorer code generation, outweighing
+     the extra memory allocation here.  */
+  if (!optimize || !is_formal || TREE_SIDE_EFFECTS (val))
     ret = create_tmp_from_val (val);
   else
     {