aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-12-07 18:14:45 +0000
committerRichard Henderson <richard.henderson@linaro.org>2024-12-12 14:28:38 -0600
commit04e006ab36a8565b92d4e21dd346367fbade7d74 (patch)
tree8364771d26de817936e3f96022fe60a59b9a870e /include
parenta5ba0a7e4e150d1350a041f0d0ef9ca6c8d7c307 (diff)
downloadqemu-04e006ab36a8565b92d4e21dd346367fbade7d74.zip
qemu-04e006ab36a8565b92d4e21dd346367fbade7d74.tar.gz
qemu-04e006ab36a8565b92d4e21dd346367fbade7d74.tar.bz2
tcg: Reset free_temps before tcg_optimize
When allocating new temps during tcg_optmize, do not re-use any EBB temps that were used within the TB. We do not have any idea what span of the TB in which the temp was live. Introduce tcg_temp_ebb_reset_freed and use before tcg_optimize, as well as replacing the equivalent in plugin_gen_inject and tcg_func_start. Cc: qemu-stable@nongnu.org Fixes: fb04ab7ddd8 ("tcg/optimize: Lower TCG_COND_TST{EQ,NE} if unsupported") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2711 Reported-by: wannacu <wannacu2049@gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Diffstat (limited to 'include')
-rw-r--r--include/tcg/tcg-temp-internal.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/tcg/tcg-temp-internal.h b/include/tcg/tcg-temp-internal.h
index 44192c5..98f91e6 100644
--- a/include/tcg/tcg-temp-internal.h
+++ b/include/tcg/tcg-temp-internal.h
@@ -42,4 +42,10 @@ TCGv_i64 tcg_temp_ebb_new_i64(void);
TCGv_ptr tcg_temp_ebb_new_ptr(void);
TCGv_i128 tcg_temp_ebb_new_i128(void);
+/* Forget all freed EBB temps, so that new allocations produce new temps. */
+static inline void tcg_temp_ebb_reset_freed(TCGContext *s)
+{
+ memset(s->free_temps, 0, sizeof(s->free_temps));
+}
+
#endif /* TCG_TEMP_FREE_H */