From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44484) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1THHlF-0002iv-TV for qemu-devel@nongnu.org; Thu, 27 Sep 2012 13:20:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1THHkz-0003G9-Fs for qemu-devel@nongnu.org; Thu, 27 Sep 2012 13:20:25 -0400 Received: from mail-pa0-f45.google.com ([209.85.220.45]:53873) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1THHkz-0003BN-3J for qemu-devel@nongnu.org; Thu, 27 Sep 2012 13:20:13 -0400 Received: by padfb10 with SMTP id fb10so1531882pad.4 for ; Thu, 27 Sep 2012 10:20:06 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Thu, 27 Sep 2012 10:19:50 -0700 Message-Id: <1348766397-20731-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 0/7] Double-word tcg/optimize improvements List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Aurelien Jarno In another thread we talked about doing the brcond2 -> brcond optimization generically for LT/GTE comparisons vs zero. That's patch 4 of this series. In addition, it seemed trivial to go ahead and apply the existing code we have for fully optimizing constant comparisons. Tested host i686, guest alpha. Where even the final patch activates during the boot rom. (FYI, implver is sorta like cpuid, querying cpu revision.) 0xfffffc0000003748: implver t0 0xfffffc000000374c: cmpeq t0,0x1,t1 0xfffffc0000003750: bne t1,0x40000003784 OP: ---- 0xfffffc0000003748 movi_i32 ir1_0,$0x2 movi_i32 ir1_1,$0x0 ---- 0xfffffc000000374c movi_i32 tmp0,$0x1 movi_i32 tmp1,$0x0 setcond2_i32 ir2_0,ir1_0,ir1_1,tmp0,tmp1,eq movi_i32 ir2_1,$0x0 ---- 0xfffffc0000003750 mov_i32 tmp0,ir2_0 mov_i32 tmp1,ir2_1 movi_i32 tmp2,$0x0 movi_i32 tmp3,$0x0 brcond2_i32 tmp0,tmp1,tmp2,tmp3,ne,$0x0 ... OP after optimization and liveness analysis: ---- 0xfffffc0000003748 movi_i32 ir1_0,$0x2 movi_i32 ir1_1,$0x0 ---- 0xfffffc000000374c nopn $0x2,$0x2 nopn $0x2,$0x2 movi_i32 ir2_0,$0x0 movi_i32 ir2_1,$0x0 ---- 0xfffffc0000003750 nopn $0x2,$0x2 nopn $0x2,$0x2 nopn $0x2,$0x2 nopn $0x2,$0x2 nop ... r~ Richard Henderson (7): tcg: Split out swap_commutative as a subroutine tcg: Optimize add2 + sub2 tcg: Swap commutative double-word comparisons tcg: Optimize double-word comparisons against zero tcg: Split out subroutines from do_constant_folding_cond tcg: Tidy brcond optimization tcg: Do constant folding on double-word comparisons tcg/optimize.c | 366 +++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 267 insertions(+), 99 deletions(-) -- 1.7.11.4