[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 8/8] tcg/optimize: Add more identity simplifications
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 8/8] tcg/optimize: Add more identity simplifications |
Date: |
Fri, 31 Jan 2014 08:47:03 -0600 |
Recognize 0 operand to andc, and -1 operands to and, orc, eqv.
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/optimize.c | 39 ++++++++++++++++++++++++---------------
1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/tcg/optimize.c b/tcg/optimize.c
index a703f8c..8d7100e 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -716,7 +716,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t
*tcg_opc_ptr,
break;
}
- /* Simplify expression for "op r, a, 0 => mov r, a" cases */
+ /* Simplify expression for "op r, a, const => mov r, a" cases */
switch (op) {
CASE_OP_32_64(add):
CASE_OP_32_64(sub):
@@ -727,23 +727,32 @@ static TCGArg *tcg_constant_folding(TCGContext *s,
uint16_t *tcg_opc_ptr,
CASE_OP_32_64(rotr):
CASE_OP_32_64(or):
CASE_OP_32_64(xor):
- if (temps[args[1]].state == TCG_TEMP_CONST) {
- /* Proceed with possible constant folding. */
- break;
- }
- if (temps[args[2]].state == TCG_TEMP_CONST
+ CASE_OP_32_64(andc):
+ if (temps[args[1]].state != TCG_TEMP_CONST
+ && temps[args[2]].state == TCG_TEMP_CONST
&& temps[args[2]].val == 0) {
- if (temps_are_copies(args[0], args[1])) {
- s->gen_opc_buf[op_index] = INDEX_op_nop;
- } else {
- s->gen_opc_buf[op_index] = op_to_mov(op);
- tcg_opt_gen_mov(s, gen_args, args[0], args[1]);
- gen_args += 2;
- }
- args += 3;
- continue;
+ goto do_mov3;
}
break;
+ CASE_OP_32_64(and):
+ CASE_OP_32_64(orc):
+ CASE_OP_32_64(eqv):
+ if (temps[args[1]].state != TCG_TEMP_CONST
+ && temps[args[2]].state == TCG_TEMP_CONST
+ && temps[args[2]].val == -1) {
+ goto do_mov3;
+ }
+ break;
+ do_mov3:
+ if (temps_are_copies(args[0], args[1])) {
+ s->gen_opc_buf[op_index] = INDEX_op_nop;
+ } else {
+ s->gen_opc_buf[op_index] = op_to_mov(op);
+ tcg_opt_gen_mov(s, gen_args, args[0], args[1]);
+ gen_args += 2;
+ }
+ args += 3;
+ continue;
default:
break;
}
--
1.8.5.3
- [Qemu-devel] [PATCH 0/8] tcg optimization improvements, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 1/8] tcg/optimize: fix known-zero bits for right shift ops, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 2/8] tcg/optimize: fix known-zero bits optimization, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 3/8] tcg/optimize: improve known-zero bits for 32-bit ops, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 4/8] tcg/optimize: add known-zero bits compute for load ops, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 5/8] tcg/optimize: Handle known-zeros masks for ANDC, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 6/8] tcg/optimize: Simply some logical ops to NOT, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 7/8] tcg/optimize: Optmize ANDC X, Y, Y to MOV X, 0, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 8/8] tcg/optimize: Add more identity simplifications,
Richard Henderson <=