On 5/29/23 04:49, Fei Wu wrote:
+/*
+ * The TCGProfile structure holds data for analysing the quality of
+ * the code generation. The data is split between stuff that is valid
+ * for the lifetime of a single translation and things that are valid
+ * for the lifetime of the translator. As the former is reset for each
+ * new translation so it should be copied elsewhere if you want to
+ * keep it.
+ *
+ * The structure is safe to access within the context of translation
+ * but accessing the data from elsewhere should be done with safe
+ * work.
+ */
+typedef struct TCGProfile {
+
+ struct {
+ int nb_guest_insns;
+ int nb_spills;
+ int nb_ops_pre_opt;
+
+ int del_op_count;
+ int temp_count;
+ } translation;
+
+ int64_t cpu_exec_time;
+ int64_t op_count; /* total insn count */
+ int64_t code_in_len;
+ int64_t code_out_len;
+ int64_t search_out_len;
+
+ /* Timestamps during translation */
+ uint64_t gen_start_time;
+ uint64_t gen_ir_done_time;
+ uint64_t gen_opt_done_time;
+ uint64_t gen_la_done_time;
+ uint64_t gen_code_done_time;
+
+ /* Lifetime count of TCGOps per TCGContext */
+ uint64_t table_op_count[NB_OPS];
+} TCGProfile;
+
Why have you added this back?
The whole point of removing CONFIG_PROFILE to begin was to have all new code. Not to
remove it then reintroduce it unchanged.
In tcg_gen_code, you have access to the TranslationBlock as s->gen_tb. There is zero
point to accumulating into TCGProfile, when you could be accumulating into TCGStatistics
directly.
r~