------- Comment #33 from amylaar at gcc dot gnu dot org  2010-07-08 01:00 
-------
pop_labels_1 installs the LABEL_DECL of half in BLOCK_VARS:

Breakpoint 16, pop_labels_1 (slot=0xb7d86f94, data=0xb7d95068)
    at ../../gcc/gcc/cp/decl.c:384
384       struct named_label_entry *ent = (struct named_label_entry *) *slot;
(gdb) n
387       pop_label (ent->label_decl, NULL_TREE);
(gdb)
391       TREE_CHAIN (ent->label_decl) = BLOCK_VARS (block);

If we are NOT generating debug info, this is cleared in
remove_unused_scope_block_p:

Hardware watchpoint 15: *$11
(gdb) cont
Continuing.
Hardware watchpoint 15: *$11

Old value = (tree) 0xb7cf9f18
New value = (tree) 0x0
remove_unused_scope_block_p (scope=0xb7d86fa4)
    at ../../gcc/gcc/tree-ssa-live.c:427
427       for (t = &BLOCK_VARS (scope); *t; t = next)

Note this code in lines 478ff:
      else if (debug_info_level == DINFO_LEVEL_NORMAL
               || debug_info_level == DINFO_LEVEL_VERBOSE)
        ;
      else
        {
          *t = TREE_CHAIN (*t);
          next = t;
        }

But if we are generating debug info, this BLOCK_VARS setting remains untouched,
and copied in remap_block:

Breakpoint 14, remap_block (block=0xbfffee6c, id=0xbfffef0c)
    at ../../gcc/gcc/tree-inline.c:616
616       BLOCK_VARS (new_block) = remap_decls (BLOCK_VARS (old_block),
(gdb) call debug_tree(old_block->block_vars)
There is no member named block_vars.
(gdb) call debug_tree(old_block->block.vars)
 <label_decl 0xb7cf9f18 half
    type <void_type 0xb7d00840 void asm_written VOID
        align 8 symtab 0 alias set -1 canonical type 0xb7d00840
        pointer_to_this <pointer_type 0xb7d008a0>>
    VOID file t.c line 75 col 1
    align 1 context <function_decl 0xb7d88900 ix86_expand_vector_init_general>
initial <error_mark 0xb7cf07e0>>
(gdb) p old_block->block.vars->common.chain
$21 = (tree) 0x0

to be copied later from expand_call_inline ...

We got this with debug info:

Breakpoint 12, expand_call_inline (fn=0xb7d88980)
    at ../../gcc/gcc/tree-inline.c:3872
3872      if (DECL_INITIAL (fn))
(gdb) s
3873        prepend_lexical_block (id->block, remap_blocks (DECL_INITIAL (fn),
id));
(gdb)
remap_blocks (block=0xb7d95750, id=0xbffff028)
    at ../../gcc/gcc/tree-inline.c:634
634       if (!block)
(gdb) call debug_tree(block)
 <block 0xb7d95750 used
    vars <label_decl 0xb7d99738 half
        type <void_type 0xb7d00840 void asm_written VOID
            align 8 symtab 0 alias set -1 canonical type 0xb7d00840
            pointer_to_this <pointer_type 0xb7d008a0>>
        VOID file t.c line 75 col 1
        align 1 context <function_decl 0xb7d88c00
_ZL31ix86_expand_vector_init_generalb12machine_modeP7rtx_defS1_.isra.0> initial
<error_mark 0xb7cf07e0> abstract_origin <label_decl 0xb7cf9f18 half>>
    subblocks <block 0xb7d95784 used
        vars <var_decl 0xb7d97780 ops type <array_type 0xb7d8cf00>
            addressable used tree_1 decl_5 BLK file t.c line 61 col 13
            size <integer_cst 0xb7d7f5a0 constant 1024>
            unit size <integer_cst 0xb7d901c8 constant 128>
            align 32 context <function_decl 0xb7d88c00
_ZL31ix86_expand_vector_init_generalb12machine_modeP7rtx_defS1_.isra.0>
abstract_origin <var_decl 0xb7d91060 ops> chain <var_decl 0xb7d977e0 n>>
supercontext <block 0xb7d95750>
        subblocks <block 0xb7d957b8 used supercontext <block 0xb7d95784>
            abstract_origin <block 0xb7d95000 used vars <var_decl 0xb7d914e0
n_words>
                supercontext <block 0xb7d95034 used vars <var_decl 0xb7d91060
ops>
                    supercontext <block 0xb7d95068 used vars <label_decl
0xb7cf9f18 half> supercontext <function_decl 0xb7d88900
ix86_expand_vector_init_general> subblocks <block 0xb7d95034>> subblocks <block
0xb7d95000>>>> abstract_origin <block 0xb7d95034>> abstract_origin <block
0xb7d95068>>

and that gets the LABEL_DECL an expedited copy with a relatively low uid:

Hardware watchpoint 10: *$11

Old value = 1853
New value = 1877
0x086ee9cc in copy_node_stat (node=0xb7d99738) at ../../gcc/gcc/tree.c:966
966               DECL_UID (t) = next_decl_uid++;
(gdb) bt
#0  0x086ee9cc in copy_node_stat (node=0xb7d99738) at ../../gcc/gcc/tree.c:966
#1  0x087a315d in copy_decl_no_change (decl=0xb7d99738, id=0xbffff028)
    at ../../gcc/gcc/tree-inline.c:4782
#2  0x087a427c in remap_decl (decl=0xb7d99738, id=0xbffff028)
    at ../../gcc/gcc/tree-inline.c:288
#3  0x087a5534 in remap_decls (decls=<value optimized out>,
    nonlocalized_list=0xb7d95940, id=0xbffff028)
    at ../../gcc/gcc/tree-inline.c:557
#4  0x087a58db in remap_block (block=0xbfffef8c, id=0xbffff028)
    at ../../gcc/gcc/tree-inline.c:616
#5  0x087a5a5e in remap_blocks (block=0xb7d95750, id=0xbffff028)
    at ../../gcc/gcc/tree-inline.c:637
#6  0x087affe0 in expand_call_inline (fn=0xb7d88980)
    at ../../gcc/gcc/tree-inline.c:3873
#7  gimple_expand_calls_inline (fn=0xb7d88980)
    at ../../gcc/gcc/tree-inline.c:4057
#8  optimize_inline_calls (fn=0xb7d88980) at ../../gcc/gcc/tree-inline.c:4207
#9  0x0877e62d in cgraph_early_inlining () at ../../gcc/gcc/ipa-inline.c:1740
#10 0x084d57c7 in execute_one_pass (pass=0x8cdd8e8)
    at ../../gcc/gcc/passes.c:1576
#11 0x084d5acd in execute_pass_list (pass=0x8cdd8e8)
    at ../../gcc/gcc/passes.c:1631
#12 0x084d32d3 in do_per_function_toporder (
    callback=0x84d5ab0 <execute_pass_list>, data=0x8c47c80)
    at ../../gcc/gcc/passes.c:1154
#13 0x084d5b3d in execute_ipa_pass_list (pass=0x8c47b80)
    at ../../gcc/gcc/passes.c:1931
#14 0x08775c84 in ipa_passes () at ../../gcc/gcc/cgraphunit.c:1854
#15 cgraph_optimize () at ../../gcc/gcc/cgraphunit.c:1923
#16 0x08776435 in cgraph_finalize_compilation_unit ()
    at ../../gcc/gcc/cgraphunit.c:1171
#17 0x0818866a in cp_write_global_declarations ()
    at ../../gcc/gcc/cp/decl2.c:3925
#18 0x0857c680 in compile_file (argc=21, argv=0xbffff494)
    at ../../gcc/gcc/toplev.c:1024
#19 do_compile (argc=21, argv=0xbffff494) at ../../gcc/gcc/toplev.c:2377
#20 toplev_main (argc=21, argv=0xbffff494) at ../../gcc/gcc/toplev.c:2419
#21 0x082b062b in main (argc=21, argv=0xbffff494) at ../../gcc/gcc/main.c:35

whereas in the non-debug case, half is not in such a prominent position:

Breakpoint 11, expand_call_inline (fn=0xb7d88900)
    at ../../gcc/gcc/tree-inline.c:3872
3872      if (DECL_INITIAL (fn))
(gdb) s
3873        prepend_lexical_block (id->block, remap_blocks (DECL_INITIAL (fn),
id));
(gdb)
remap_blocks (block=0xb7d946b4, id=0xbffff048)
    at ../../gcc/gcc/tree-inline.c:634
634       if (!block)
(gdb) call debug_tree(block)
 <block 0xb7d946b4 used
    subblocks <block 0xb7d946e8 used
        vars <var_decl 0xb7d95780 ops type <array_type 0xb7d8cf00>
            addressable used tree_1 decl_5 BLK file t.c line 61 col 13
            size <integer_cst 0xb7d7f5a0 constant 1024>
            unit size <integer_cst 0xb7d8f168 constant 128>
            align 32 context <function_decl 0xb7d88b80
_ZL31ix86_expand_vector_init_generalb12machine_modeP7rtx_defS1_.isra.0>
abstract_origin <var_decl 0xb7d90060 ops> chain <var_decl 0xb7d957e0 n>>
supercontext <block 0xb7d946b4>
        subblocks <block 0xb7d9471c used supercontext <block 0xb7d946e8>
            abstract_origin <block 0xb7d86f3c used
                supercontext <block 0xb7d86f70 used vars <var_decl 0xb7d90060
ops>
                    supercontext <block 0xb7d86fa4 used supercontext
<function_decl 0xb7d88880 ix86_expand_vector_init_general> subblocks <block
0xb7d86f70>> subblocks <block 0xb7d86f3c>>>> abstract_origin <block
0xb7d86f70>> abstract_origin <block 0xb7d86fa4>>


-- 


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

Reply via email to