diff options
author | Geoffrey Keating <geoffk@apple.com> | 2004-08-25 18:11:12 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2004-08-25 18:11:12 +0000 |
commit | bbbb79d42a793c2328535b09ffaa71422353f851 (patch) | |
tree | beea9c2173e9f6b5139100616d041d09db2f4a3d /gcc/gimplify.c | |
parent | d711cf67a62351e4722d7b16b1be84899b6b1d82 (diff) | |
download | gcc-bbbb79d42a793c2328535b09ffaa71422353f851.zip gcc-bbbb79d42a793c2328535b09ffaa71422353f851.tar.gz gcc-bbbb79d42a793c2328535b09ffaa71422353f851.tar.bz2 |
gimplify.c (lookup_tmp_var): Separate temporaries when not optimizing.
* gimplify.c (lookup_tmp_var): Separate temporaries when not
optimizing.
From-SVN: r86563
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index b008a17..323df36 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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 { |