------- Comment #7 from thomas at coware dot com  2009-08-07 07:37 -------
This is how function func looks after the if conversion (test.c.144r.ce1):

(note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)

(insn 2 4 3 2 test.c:3 (set (reg/v:SI 63 [ arg ])
        (mem/c/i:SI (reg/f:SI 16 argp) [0 arg+0 S4 A32])) 41 {*movsi_1}
(expr_list:REG_EQUIV (mem/c/i:SI (reg/f:SI 16 argp) [0 arg+0 S4 A32])
        (nil)))

(note 3 2 7 2 NOTE_INSN_FUNCTION_BEG)

(insn 7 3 34 2 test.c:5 (set (reg:CCGOC 17 flags)
        (compare:CCGOC (reg/v:SI 63 [ arg ])
            (const_int 0 [0x0]))) 0 {*cmpsi_ccno_1} (nil))

(insn 34 7 35 2 test.c:5 (parallel [
            (set (reg:DI 65)
                (sign_extend:DI (reg/v:SI 63 [ arg ])))
            (clobber (reg:CC 17 flags))
            (clobber (scratch:SI))
        ]) 87 {*extendsidi2_1} (nil))

(insn 35 34 36 2 test.c:5 (parallel [
            (set (reg/v:DI 60 [ val ])
                (lshiftrt:DI (reg:DI 65)
                    (const_int 63 [0x3f])))
            (clobber (reg:CC 17 flags))
        ]) 356 {*lshrdi3_1} (nil))

(insn 36 35 24 2 test.c:5 (parallel [
            (set (reg/v:DI 60 [ val ])
                (ashift:DI (reg/v:DI 60 [ val ])
                    (const_int 31 [0x1f])))
            (clobber (reg:CC 17 flags))
        ]) 319 {*ashldi3_1} (nil))

(insn 24 36 30 2 test.c:9 (set (reg/i:DI 0 ax)
        (reg/v:DI 60 [ val ])) 63 {*movdi_2} (nil))

(insn 30 24 0 2 test.c:9 (use (reg/i:DI 0 ax)) -1 (nil))

This already looks wrong to me, but I am not completely sure. Could somebody
have a look who understands this RTL code better than me?

The last version before the if conversion looks like this (test.c.141r.cse1):
(note 4 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)

(insn 2 4 3 2 test.c:3 (set (reg/v:SI 63 [ arg ])
        (mem/c/i:SI (reg/f:SI 16 argp) [0 arg+0 S4 A32])) 41 {*movsi_1}
(expr_list:REG_EQUIV (mem/c/i:SI (reg/f:SI 16 argp) [0 arg+0 S4 A32])
        (nil)))

(note 3 2 7 2 NOTE_INSN_FUNCTION_BEG)

(insn 7 3 8 2 test.c:5 (set (reg:CCGOC 17 flags)
        (compare:CCGOC (reg/v:SI 63 [ arg ])
            (const_int 0 [0x0]))) 0 {*cmpsi_ccno_1} (nil))

(jump_insn 8 7 9 2 test.c:5 (set (pc)
        (if_then_else (lt (reg:CCGOC 17 flags)
                (const_int 0 [0x0]))
            (label_ref 13)
            (pc))) 401 {*jcc_1} (nil))

(note 9 8 10 3 [bb 3] NOTE_INSN_BASIC_BLOCK)

(insn 10 9 13 3 test.c:5 (set (reg/v:DI 60 [ val ])
        (const_int 0 [0x0])) 63 {*movdi_2} (nil))

(code_label 13 10 14 4 2 "" [1 uses])

(note 14 13 16 4 [bb 4] NOTE_INSN_BASIC_BLOCK)

(insn 16 14 17 4 test.c:6 (set (reg/v:DI 60 [ val ])
        (const_int -2147483648 [0x80000000])) 63 {*movdi_2} (nil))

(code_label 17 16 18 5 3 "" [0 uses])

(note 18 17 20 5 [bb 5] NOTE_INSN_BASIC_BLOCK)

(insn 20 18 24 5 test.c:8 (set (reg:DI 62 [ <result> ])
        (reg/v:DI 60 [ val ])) 63 {*movdi_2} (nil))

(insn 24 20 30 5 test.c:9 (set (reg/i:DI 0 ax)
        (reg/v:DI 60 [ val ])) 63 {*movdi_2} (nil))

(insn 30 24 0 5 test.c:9 (use (reg/i:DI 0 ax)) -1 (nil))


-- 


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

Reply via email to