From: Richard Henderson <richard.hender...@linaro.org> Introduce a function to remove everything emitted since a given point.
Cc: Peter Maydell <peter.mayd...@linaro.org> Signed-off-by: Richard Henderson <richard.hender...@linaro.org> Message-id: 20210604212747.959028-1-richard.hender...@linaro.org Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> --- include/tcg/tcg.h | 1 + tcg/tcg.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index 74cb3453083..6895246fab5 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -1081,6 +1081,7 @@ TCGOp *tcg_emit_op(TCGOpcode opc); 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); +void tcg_remove_ops_after(TCGOp *op); void tcg_optimize(TCGContext *s); diff --git a/tcg/tcg.c b/tcg/tcg.c index 0dc271aac9f..262dbba1fde 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2649,6 +2649,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.20.1