On Sat, Sep 08, 2012 at 09:29:59AM +0000, Blue Swirl wrote: > On Sat, Sep 8, 2012 at 9:12 AM, Aurelien Jarno <aurel...@aurel32.net> wrote: > > On Sat, Sep 08, 2012 at 09:06:52AM +0000, Blue Swirl wrote: > >> On Sat, Sep 8, 2012 at 9:01 AM, Aurelien Jarno <aurel...@aurel32.net> > >> wrote: > >> > On Sat, Sep 08, 2012 at 08:18:50AM +0000, Blue Swirl wrote: > >> >> On Fri, Sep 7, 2012 at 1:16 PM, Aurelien Jarno <aurel...@aurel32.net> > >> >> wrote: > >> >> > This patch series improves the TCG optimizer, based on patterns found > >> >> > while executing various guest. The brcond ad setcond constant folding > >> >> > are useful especially useful when they are used to avoid some argument > >> >> > values (e.g. division by 0), and thus can be optimized when this > >> >> > argument > >> >> > is a constant. > >> >> > > >> >> > This bring around 0.5% improvement on openssl like benchmarks. > >> >> > > >> >> > > >> >> > Modifications between V1 and V2 following feedback I got: > >> >> > - In the first patch, account for the liveness analysis time and > >> >> > optimizing pass time separately > >> >> > - Fixed swith/break in patch 7 to correctly throw an error > >> >> > - Added patch 9 to make the code more readable > >> >> > Other patches are unmodified. > >> >> > > >> >> > > >> >> > Aurelien Jarno (9): > >> >> > tcg: improve profiler > >> >> > tcg/optimize: split expression simplification > >> >> > tcg/optimize: simplify or/xor r, a, 0 cases > >> >> > tcg/optimize: simplify and r, a, 0 cases > >> >> > tcg/optimize: simplify shift/rot r, 0, a => movi r, 0 cases > >> >> > >> >> Aren't the above or/and/shift/rot simplifications (and also for > >> >> example OR with 0xfffffffff and XOR register by itself) already > >> >> handled by tcg/tcg-op.h? > >> > > >> > They are handled there when the values are known at decode time. It is > >> > not the case when the value are propagated in the TB. > >> > > >> > For example, this is optimized in tcg/tcg-op.h: > >> > ori t0, t1, 0 > >> > > >> > This is not optimized in tcg/tcg-op.h: > >> > movi t2, 0 > >> > or t0, t1, t2 > >> > >> I see. Does the optimizer pass then make the tcg/tcg-op.h optimization > >> redundant, could we do the optimizations only in optimizer? > > > > Technically yes. In practice it's a good idea to keep simple > > optimizations in tcg/tcg-op.h, as they cost less in CPU time than when > > done later. > > OK. Could there be further optimizations based on tcg/tcg-op.h, for > example case OR reg, 0xffffffff -> mov reg, 0xffffffff could be > rechecked? >
Yes this is something we can add. That said I based this patch series on instructions I have found while running a few targets (arm, ppc, mips, x86_64) and looking at qemu.log. I haven't seen this one. -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net