------- Additional Comments From steven at gcc dot gnu dot org  2004-12-15 
13:54 -------
Just so everyone knows, the label disappears in the call to cleanup_cfg 
from rest_of_handle_if_conversion.  The CFG just before looks like this: 
 
Basic block 0 (dirty) 
Predecessors:  ENTRY [100.0%]  (fallthru) 
Successors:  7 [100.0%] 
 
Basic block 1 
Predecessors:  2 [25.0%]  (loop_exit) 7 [50.0%] 
Successors:  7 [100.0%]  (fallthru,dfs_back) 
 
Basic block 7 (new) 
Predecessors:  1 [100.0%]  (fallthru,dfs_back) 0 [100.0%] 
Successors:  1 [50.0%]  2 [50.0%]  (fallthru) 
 
Basic block 2 
Predecessors:  7 [50.0%]  (fallthru) 4 [100.0%]  (dfs_back) 
Successors:  4 [25.0%]  1 [25.0%]  (loop_exit) 5 [25.0%]  (loop_exit) 3 
[25.0%]  (loop_exit) 
 
Basic block 3 
Predecessors:  2 [25.0%]  (loop_exit) 
Successors:  6 [100.0%] 
 
Basic block 4 
Predecessors:  2 [25.0%] 
Successors:  2 [100.0%]  (dfs_back) 
 
Basic block 5 
Predecessors:  2 [25.0%]  (loop_exit) 
Successors:  6 [100.0%]  (fallthru) 
 
Basic block 6 
Predecessors:  3 [100.0%]  5 [100.0%]  (fallthru) 
Successors:  EXIT [100.0%]  (fallthru) 
 
 
and the RTL looks like this: 
(gdb) p debug_rtx_list (get_insns (), max_uid) 
(note 2 0 20 NOTE_INSN_DELETED) 
 
(note 20 2 6 0 [bb 0] NOTE_INSN_BASIC_BLOCK) 
 
(insn 6 20 9 0 (set (reg/v:SI 61 [ i ]) 
        (mem/i:SI (reg/f:SI 16 argp) [3 i+0 S4 A32])) 42 
{*movsi_1_nointernunit} (nil) 
    (expr_list:REG_EQUIV (mem/i:SI (reg/f:SI 16 argp) [3 i+0 S4 A32]) 
        (nil))) 
 
(insn 9 6 15 0 (parallel [ 
            (set (reg/f:SI 7 sp) 
                (and:SI (reg/f:SI 7 sp) 
                    (const_int -16 [0xfffffffffffffff0]))) 
            (clobber (reg:CC 17 flags)) 
        ]) 289 {*andsi_1} (nil) 
    (nil)) 
 
(insn 15 9 7 0 (parallel [ 
            (set (reg/f:SI 7 sp) 
                (plus:SI (reg/f:SI 7 sp) 
                    (const_int -16 [0xfffffffffffffff0]))) 
            (clobber (reg:CC 17 flags)) 
        ]) 199 {*addsi_1} (nil) 
    (nil)) 
 
(note 7 15 22 0 NOTE_INSN_FUNCTION_BEG) 
 
(insn 22 7 73 0 (set (reg/v:SI 59 [ lsm_tmp1 ]) 
        (reg/v:SI 61 [ i ])) 42 {*movsi_1_nointernunit} (nil) 
    (nil)) 
 
(note 73 22 78 0 NOTE_INSN_LOOP_BEG) 
 
(insn 78 73 84 0 (set (reg:SI 75) 
        (mem/u/c:SI (plus:SI (mult:SI (reg/v:SI 61 [ i ]) 
                    (const_int 4 [0x4])) 
                (label_ref:SI 32)) [0 S4 A8])) 42 {*movsi_1_nointernunit} 
(nil) 
    (insn_list:REG_LABEL 32 (nil))) 
 
(jump_insn 84 78 85 0 (set (pc) 
        (label_ref 83)) -1 (nil) 
    (nil)) 
 
(barrier 85 84 70) 
 
(code_label 70 85 69 1 9 "" [3 uses]) 
 
(note 69 70 83 1 [bb 1] NOTE_INSN_BASIC_BLOCK) 
 
(code_label 83 69 82 7 11 "" [1 uses]) 
 
(note 82 83 26 7 [bb 7] NOTE_INSN_BASIC_BLOCK) 
 
(insn 26 82 27 7 (set (reg:CC 17 flags) 
        (compare:CC (reg/v:SI 59 [ lsm_tmp1 ]) 
            (const_int 5 [0x5]))) 5 {*cmpsi_1_insn} (nil) 
    (nil)) 
 
(jump_insn 27 26 80 7 (set (pc) 
        (if_then_else (gtu (reg:CC 17 flags) 
                (const_int 0 [0x0])) 
            (label_ref 70) 
            (pc))) 486 {*jcc_1} (nil) 
    (expr_list:REG_BR_PROB (const_int 5000 [0x1388]) 
        (nil))) 
 
(code_label 80 27 66 2 10 "" [1 uses]) 
 
(note 66 80 30 2 [bb 2] NOTE_INSN_BASIC_BLOCK) 
 
(jump_insn 30 66 31 2 (parallel [ 
            (set (pc) 
                (reg:SI 75)) 
            (use (label_ref 32)) 
        ]) 503 {*tablejump_1} (nil) 
    (nil)) 
 
(barrier 31 30 32) 
 
(code_label 32 31 33 6 "" [2 uses]) 
 
(jump_insn 33 32 34 (addr_vec:SI [ 
            (label_ref:SI 35) 
            (label_ref:SI 35) 
            (label_ref/s:SI 46) 
            (label_ref/s:SI 46) 
            (label_ref:SI 70) 
            (label_ref:SI 40) 
        ]) -1 (nil) 
    (nil)) 
 
(barrier 34 33 35) 
 
(code_label 35 34 36 3 3 "" [2 uses]) 
 
(note 36 35 37 3 [bb 3] NOTE_INSN_BASIC_BLOCK) 
 
(insn 37 36 38 3 (set (reg/v:SI 58 [ D1127 ]) 
        (const_int 1 [0x1])) 42 {*movsi_1_nointernunit} (nil) 
    (nil)) 
 
(jump_insn 38 37 39 3 (set (pc) 
        (label_ref/s 50)) -1 (nil) 
    (nil)) 
 
(barrier 39 38 40) 
 
(code_label 40 39 41 4 5 "" [1 uses]) 
 
(note 41 40 42 4 [bb 4] NOTE_INSN_BASIC_BLOCK) 
 
(insn 42 41 79 4 (set (reg/v:SI 59 [ lsm_tmp1 ]) 
        (const_int 4 [0x4])) 42 {*movsi_1_nointernunit} (nil) 
    (nil)) 
 
(insn 79 42 81 4 (set (reg:SI 75) 
        (label_ref:SI 70)) 42 {*movsi_1_nointernunit} (nil) 
    (insn_list:REG_LABEL 70 (nil))) 
 
(insn 81 79 43 4 (set (reg:CC 17 flags) 
        (compare:CC (reg/v:SI 59 [ lsm_tmp1 ]) 
            (const_int 5 [0x5]))) -1 (nil) 
    (nil)) 
 
(jump_insn 43 81 44 4 (set (pc) 
        (label_ref 80)) 500 {jump} (nil) 
    (nil)) 
 
(barrier 44 43 74) 
 
(note 74 44 46 NOTE_INSN_LOOP_END) 
 
(code_label 46 74 47 5 4 ("L3") [2 uses]) 
 
(note 47 46 48 5 [bb 5] NOTE_INSN_BASIC_BLOCK) 
 
(insn 48 47 50 5 (set (reg/v:SI 58 [ D1127 ]) 
        (const_int 0 [0x0])) 42 {*movsi_1_nointernunit} (nil) 
    (nil)) 
 
(code_label 50 48 51 6 7 ("L7") [1 uses]) 
 
(note 51 50 55 6 [bb 6] NOTE_INSN_BASIC_BLOCK) 
 
(note 55 51 58 6 NOTE_INSN_FUNCTION_END) 
 
(insn 58 55 64 6 (set (reg/i:SI 0 ax [ <result> ]) 
        (reg/v:SI 58 [ D1127 ])) 42 {*movsi_1_nointernunit} (nil) 
    (nil)) 
 
(insn 64 58 0 6 (use (reg/i:SI 0 ax [ <result> ])) -1 (nil) 
    (nil)) 
 
$15 = void 
 
 
The code_label that disappears is: 
 
(gdb) p debug_rtx_find (get_insns (), 70) 
(code_label 70 85 69 1 9 "" [3 uses]) 
 
The three references to the label are: 
 
(jump_insn 27 26 80 7 (set (pc) 
        (if_then_else (gtu (reg:CC 17 flags) 
                (const_int 0 [0x0])) 
            (label_ref 70) 
            (pc))) 486 {*jcc_1} (nil) 
    (expr_list:REG_BR_PROB (const_int 5000 [0x1388]) 
        (nil))) 
 
(jump_insn 33 32 34 (addr_vec:SI [ 
            (label_ref:SI 35) 
            (label_ref:SI 35) 
            (label_ref/s:SI 46) 
            (label_ref/s:SI 46) 
            (label_ref:SI 70) 
            (label_ref:SI 40) 
        ]) -1 (nil) 
    (nil)) 
 
(insn 79 42 81 4 (set (reg:SI 75) 
        (label_ref:SI 70)) 42 {*movsi_1_nointernunit} (nil) 
    (insn_list:REG_LABEL 70 (nil))) 
 

-- 


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

Reply via email to