|
|
5544c1 |
From 7c1a67bb734f364ea0643b549e030f04d4eed798 Mon Sep 17 00:00:00 2001
|
|
|
5544c1 |
From: Aurelien Jarno <aurelien@aurel32.net>
|
|
|
5544c1 |
Date: Tue, 11 Sep 2012 16:18:49 +0200
|
|
|
5544c1 |
Subject: [PATCH] tcg/optimize: do copy propagation for all operations
|
|
|
5544c1 |
|
|
|
5544c1 |
It is possible to due copy propagation for all operations, even the one
|
|
|
5544c1 |
that have side effects or clobber arguments (it only concerns input
|
|
|
5544c1 |
arguments). That said, the call operation should be handled differently
|
|
|
5544c1 |
due to the variable number of arguments.
|
|
|
5544c1 |
|
|
|
5544c1 |
Reviewed-by: Richard Henderson <rth@twiddle.net>
|
|
|
5544c1 |
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
|
|
|
5544c1 |
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
|
|
|
5544c1 |
---
|
|
|
5544c1 |
tcg/optimize.c | 11 +++++++++--
|
|
|
5544c1 |
1 file changed, 9 insertions(+), 2 deletions(-)
|
|
|
5544c1 |
|
|
|
5544c1 |
diff --git a/tcg/optimize.c b/tcg/optimize.c
|
|
|
5544c1 |
index 1904b39..aeb2225 100644
|
|
|
5544c1 |
--- a/tcg/optimize.c
|
|
|
5544c1 |
+++ b/tcg/optimize.c
|
|
|
5544c1 |
@@ -378,8 +378,15 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
|
|
5544c1 |
op = gen_opc_buf[op_index];
|
|
|
5544c1 |
def = &tcg_op_defs[op];
|
|
|
5544c1 |
/* Do copy propagation */
|
|
|
5544c1 |
- if (!(def->flags & (TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS))) {
|
|
|
5544c1 |
- assert(op != INDEX_op_call);
|
|
|
5544c1 |
+ if (op == INDEX_op_call) {
|
|
|
5544c1 |
+ int nb_oargs = args[0] >> 16;
|
|
|
5544c1 |
+ int nb_iargs = args[0] & 0xffff;
|
|
|
5544c1 |
+ for (i = nb_oargs + 1; i < nb_oargs + nb_iargs + 1; i++) {
|
|
|
5544c1 |
+ if (temps[args[i]].state == TCG_TEMP_COPY) {
|
|
|
5544c1 |
+ args[i] = find_better_copy(s, args[i]);
|
|
|
5544c1 |
+ }
|
|
|
5544c1 |
+ }
|
|
|
5544c1 |
+ } else {
|
|
|
5544c1 |
for (i = def->nb_oargs; i < def->nb_oargs + def->nb_iargs; i++) {
|
|
|
5544c1 |
if (temps[args[i]].state == TCG_TEMP_COPY) {
|
|
|
5544c1 |
args[i] = find_better_copy(s, args[i]);
|
|
|
5544c1 |
--
|
|
|
5544c1 |
1.7.12.1
|
|
|
5544c1 |
|