[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 30/34] tcg: Introduce tcg_remove_ops_after
From: |
Richard Henderson |
Subject: |
[PULL 30/34] tcg: Introduce tcg_remove_ops_after |
Date: |
Fri, 11 Jun 2021 16:41:40 -0700 |
Introduce a function to remove everything emitted
since a given point.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/tcg/tcg.h | 10 ++++++++++
tcg/tcg.c | 13 +++++++++++++
2 files changed, 23 insertions(+)
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index e95abac9f4..1d056ed0ed 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -1071,6 +1071,16 @@ void tcg_op_remove(TCGContext *s, TCGOp *op);
TCGOp *tcg_op_insert_before(TCGContext *s, TCGOp *op, TCGOpcode opc);
TCGOp *tcg_op_insert_after(TCGContext *s, TCGOp *op, TCGOpcode opc);
+/**
+ * tcg_remove_ops_after:
+ * @op: target operation
+ *
+ * Discard any opcodes emitted since @op. Expected usage is to save
+ * a starting point with tcg_last_op(), speculatively emit opcodes,
+ * then decide whether or not to keep those opcodes after the fact.
+ */
+void tcg_remove_ops_after(TCGOp *op);
+
void tcg_optimize(TCGContext *s);
/* Allocate a new temporary and initialize it with a constant. */
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 81da553244..ca482c2301 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -2083,6 +2083,19 @@ void tcg_op_remove(TCGContext *s, TCGOp *op)
#endif
}
+void tcg_remove_ops_after(TCGOp *op)
+{
+ TCGContext *s = tcg_ctx;
+
+ while (true) {
+ TCGOp *last = tcg_last_op();
+ if (last == op) {
+ return;
+ }
+ tcg_op_remove(s, last);
+ }
+}
+
static TCGOp *tcg_op_alloc(TCGOpcode opc)
{
TCGContext *s = tcg_ctx;
--
2.25.1
- [PULL 26/34] tcg: Round the tb_size default from qemu_get_host_physmem, (continued)
- [PULL 26/34] tcg: Round the tb_size default from qemu_get_host_physmem, Richard Henderson, 2021/06/11
- [PULL 28/34] tcg: When allocating for !splitwx, begin with PROT_NONE, Richard Henderson, 2021/06/11
- [PULL 31/34] tcg: Fix documentation for tcg_constant_* vs tcg_temp_free_*, Richard Henderson, 2021/06/11
- [PULL 24/34] tcg: Sink qemu_madvise call to common code, Richard Henderson, 2021/06/11
- [PULL 22/34] tcg: Allocate code_gen_buffer into struct tcg_region_state, Richard Henderson, 2021/06/11
- [PULL 20/34] tcg: Tidy split_cross_256mb, Richard Henderson, 2021/06/11
- [PULL 25/34] util/osdep: Add qemu_mprotect_rw, Richard Henderson, 2021/06/11
- [PULL 27/34] tcg: Merge buffer protection and guard page protection, Richard Henderson, 2021/06/11
- [PULL 29/34] tcg: Move tcg_init_ctx and tcg_ctx from accel/tcg/, Richard Henderson, 2021/06/11
- [PULL 32/34] tcg/arm: Fix tcg_out_op function signature, Richard Henderson, 2021/06/11
- [PULL 30/34] tcg: Introduce tcg_remove_ops_after,
Richard Henderson <=
- [PULL 33/34] softfloat: Fix tp init in float32_exp2, Richard Henderson, 2021/06/11
- [PULL 34/34] docs/devel: Explain in more detail the TB chaining mechanisms, Richard Henderson, 2021/06/11
- Re: [PULL 00/34] tcg patch queue, Peter Maydell, 2021/06/13