aboutsummaryrefslogtreecommitdiff
path: root/tcg/optimize.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@twiddle.net>2016-11-02 11:20:15 -0600
committerRichard Henderson <richard.henderson@linaro.org>2017-10-24 21:43:50 +0200
commitfa477d25470187030614288d35bc734edffa41ee (patch)
treea4e21c764fff7a6fa3f4c48d3ac2c95eb1c73bf1 /tcg/optimize.c
parent434391390ba99996af1591b427a73b3f5c05065e (diff)
tcg: Add temp_global bit to TCGTemp
This avoids needing to test the index of a temp against nb_globals. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Emilio G. Cota <cota@braap.org> Signed-off-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'tcg/optimize.c')
-rw-r--r--tcg/optimize.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/tcg/optimize.c b/tcg/optimize.c
index d8c3a7ed56..55f9e83ce8 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -116,25 +116,26 @@ static TCGOpcode op_to_movi(TCGOpcode op)
}
}
-static TCGArg find_better_copy(TCGContext *s, TCGArg temp)
+static TCGArg find_better_copy(TCGContext *s, TCGArg arg)
{
+ TCGTemp *ts = arg_temp(arg);
TCGArg i;
/* If this is already a global, we can't do better. */
- if (temp < s->nb_globals) {
- return temp;
+ if (ts->temp_global) {
+ return arg;
}
/* Search for a global first. */
- for (i = temps[temp].next_copy ; i != temp ; i = temps[i].next_copy) {
+ for (i = temps[arg].next_copy ; i != arg; i = temps[i].next_copy) {
if (i < s->nb_globals) {
return i;
}
}
/* If it is a temp, search for a temp local. */
- if (!arg_temp(temp)->temp_local) {
- for (i = temps[temp].next_copy ; i != temp ; i = temps[i].next_copy) {
+ if (!ts->temp_local) {
+ for (i = temps[arg].next_copy ; i != arg; i = temps[i].next_copy) {
if (s->temps[i].temp_local) {
return i;
}
@@ -142,7 +143,7 @@ static TCGArg find_better_copy(TCGContext *s, TCGArg temp)
}
/* Failure to find a better representation, return the same temp. */
- return temp;
+ return arg;
}
static bool temps_are_copies(TCGArg arg1, TCGArg arg2)