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~

Reply via email to