aboutsummaryrefslogtreecommitdiff
path: root/tcg/tcg.h
diff options
context:
space:
mode:
authorBlue Swirl <blauwirbel@gmail.com>2011-08-06 13:58:47 +0000
committerBlue Swirl <blauwirbel@gmail.com>2011-08-07 09:33:20 +0000
commite31b0a7c050711884ad570fe73df806520953618 (patch)
treed2268fd649f1f2a5e154276918c2e9c243ca9534 /tcg/tcg.h
parent97b348e7d221c94ddde609346407bd2cd6f85044 (diff)
TCG: fix copy propagation
Copy propagation introduced in 22613af4a6d9602001e6d0e7b6d98aa40aa018dc considered only global registers. However, register temps and stack allocated locals must be handled differently because register temps don't survive across brcond. Fix by propagating only within same class of temps. Tested-by: Stefan Weil <weil@mail.berlios.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'tcg/tcg.h')
-rw-r--r--tcg/tcg.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/tcg/tcg.h b/tcg/tcg.h
index e76f9afecc..e2a7095bb5 100644
--- a/tcg/tcg.h
+++ b/tcg/tcg.h
@@ -410,6 +410,11 @@ static inline TCGv_i64 tcg_temp_local_new_i64(void)
void tcg_temp_free_i64(TCGv_i64 arg);
char *tcg_get_arg_str_i64(TCGContext *s, char *buf, int buf_size, TCGv_i64 arg);
+static inline bool tcg_arg_is_local(TCGContext *s, TCGArg arg)
+{
+ return s->temps[arg].temp_local;
+}
+
#if defined(CONFIG_DEBUG_TCG)
/* If you call tcg_clear_temp_count() at the start of a section of
* code which is not supposed to leak any TCG temporaries, then