------- Comment #11 from rguenth at gcc dot gnu dot org  2009-12-02 13:16 
-------
The patch didn't change performance.  For the relevant functions I see

mv-search.c:452:1: warning: failing block due to bad pattern

(the location seems to be always the end of the function though).

The insns are most of the time

(insn 333 1737 334 39 mv-search.c:542 (set (reg:DI 0 ax [orig:1365
block_c.pos_x ] [1365])
        (sign_extend:DI (reg:SI 0 ax))) 126 {extendsidi2_rex64} (nil))

or similar.

For the hot function with the regression I see:

(insn 287 2237 289 9 mv-search.c:327 (set (reg:DI 0 ax [803])
        (sign_extend:DI (reg:SI 0 ax [802]))) 126 {extendsidi2_rex64} (nil))

(insn 437 436 438 27 mv-search.c:305 (parallel [
            (set (reg:DI 5 di [853])
                (zero_extend:DI (plus:SI (reg:SI 5 di [orig:737 ivtmp.1996 ]
[737])
                        (const_int -1 [0xffffffffffffffff]))))
            (clobber (reg:CC 17 flags))
        ]) 253 {*addsi_1_zext} (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))

(insn 663 662 664 55 mv-search.c:436 (set (reg:DI 0 ax [940])
        (sign_extend:DI (reg:SI 0 ax [939]))) 126 {extendsidi2_rex64} (nil))

(insn 719 2224 721 62 mv-search.c:327 (set (reg:DI 0 ax [948])
        (sign_extend:DI (reg:SI 0 ax [947]))) 126 {extendsidi2_rex64} (nil))

line 436 is inside the hot loop in question, I'll attach a dump of the
BB in question we skip due to it.  After the above insn only the following
extra insns appear:

(insn 664 663 665 55 mv-search.c:436 (parallel [
            (set (reg/v:SI 41 r12 [orig:394 LineSadBlk3 ] [394])
                (plus:SI (reg/v:SI 41 r12 [orig:394 LineSadBlk3 ] [394])
                    (mem:SI (plus:DI (mult:DI (reg:DI 0 ax [940])
                                (const_int 4 [0x4]))
                            (reg/f:DI 1 dx [orig:479 byte_abs.393 ] [479])) [2
S4 A32])))  
            (clobber (reg:CC 17 flags))
        ]) 251 {*addsi_1} (expr_list:REG_DEAD (reg/f:DI 1 dx [orig:479
byte_abs.393 ] [479])
        (expr_list:REG_DEAD (reg:DI 0 ax [940])
            (expr_list:REG_UNUSED (reg:CC 17 flags)
                (nil)))))
(note 665 664 666 55 NOTE_INSN_DELETED)
(insn 666 665 667 55 mv-search.c:305 (parallel [
            (set (reg/v/f:DI 3 bx [orig:404 orgptr ] [404])
                (plus:DI (reg/v/f:DI 3 bx [orig:404 orgptr ] [404])
                    (const_int 32 [0x20])))
            (clobber (reg:CC 17 flags))
        ]) 252 {*adddi_1} (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
(insn 667 666 669 55 mv-search.c:305 (parallel [
            (set (reg:DI 44 r15 [orig:398 ivtmp.1894 ] [398])
                (plus:DI (reg:DI 44 r15 [orig:398 ivtmp.1894 ] [398])
                    (const_int 32 [0x20])))
            (clobber (reg:CC 17 flags))
        ]) 252 {*adddi_1} (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
(insn 669 667 670 55 mv-search.c:417 (set (reg:CCZ 17 flags)
        (compare:CCZ (reg:DI 44 r15 [orig:398 ivtmp.1894 ] [398])
            (const_int 128 [0x80]))) 7 {*cmpdi_1} (nil))
(jump_insn 670 669 671 55 mv-search.c:417 (set (pc)
        (if_then_else (ne (reg:CCZ 17 flags)
                (const_int 0 [0x0]))
            (label_ref 668)
            (pc))) 619 {*jcc_1} (expr_list:REG_DEAD (reg:CCZ 17 flags)
        (expr_list:REG_BR_PROB (const_int 7500 [0x1d4c])
            (nil)))
 -> 668)
;; lr  out       3 [bx] 6 [bp] 7 [sp] 41 [r12] 42 [r13] 43 [r14] 44 [r15]
;; live  out     3 [bx] 6 [bp] 7 [sp] 41 [r12] 42 [r13] 43 [r14] 44 [r15]


They all look like they'd be handled just fine.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42216

Reply via email to