Hi all, there is a problem in the vcg file created when compiling the following code with gcc's -fdump-rtl-stack -dv:
#include <stdio.h> void fun(void) { printf("fun\n"); } int main(void) { fun(); return 0; } the vcg file created has the two nodes "main.0" and "fun.0" disconnected from the rest of the graph, i.e. there is no edge from either of them to the rest of the relevant nodes. can anyone please hint on why this happen and/or how can it be fixed ? thank you sunzir ps - i am attaching the original code, the created vcg file, and the rtl file, for easy reference.
#include <stdio.h> void fun(void) { printf("fun\n"); } int main(void) { fun(); return 0; }
graph: { port_sharing: no graph: { title: "fun" folding: 1 hidden: 2 node: { title: "fun.0" } graph: { title: "fun.BB1" folding: 1 color: lightblue label: "basic block 1" node: { title: "fun.6" color: lightgrey label: "note 6 NOTE_INSN_BASIC_BLOCK" } edge: { sourcename: "fun.6" targetname: "fun.20" } node: { title: "fun.20" color: green label: "insn 20 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (reg/f:SI 6 bp)) " } edge: { sourcename: "fun.20" targetname: "fun.21" } node: { title: "fun.21" color: green label: "insn 21 (set (reg/f:SI 6 bp) (reg/f:SI 7 sp)) " } edge: { sourcename: "fun.21" targetname: "fun.22" } node: { title: "fun.22" color: green label: "insn 22 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int -8 [0xfffffffffffffff8]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) " } edge: { sourcename: "fun.22" targetname: "fun.8" } node: { title: "fun.8" color: green label: "insn 8 (set (mem:SI (reg/f:SI 7 sp) [0 S4 A32]) (symbol_ref/f:SI (\"*.LC0\") [flags 0x2] <string_cst 0xb7db3d00>)) " } edge: { sourcename: "fun.8" targetname: "fun.9" } node: { title: "fun.9" color: darkgreen label: "call_insn 9 (set (reg:SI 0 ax) (call (mem:QI (symbol_ref:SI (\"puts\") [flags 0x41] <function_decl 0xb7d6e000 __builtin_puts>) [0 S1 A8]) (const_int 4 [0x4]))) " } edge: { sourcename: "fun.9" targetname: "fun.25" } node: { title: "fun.25" color: green label: "insn 25 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 6 bp) (const_int 4 [0x4]))) (set (reg/f:SI 6 bp) (mem:SI (reg/f:SI 6 bp) [0 S4 A8])) (clobber (mem:BLK (scratch) [0 A8])) ]) " } edge: { sourcename: "fun.25" targetname: "fun.26" } node: { title: "fun.26" color: darkgreen label: "jump_insn 26 (return) " } } edge: { sourcename: "fun.26" targetname: "fun.999999" color: blue } edge: { sourcename: "fun.26" targetname: "fun.999999" color: green class: 3 } node: { title: "fun.999999" label: "END" } } graph: { title: "main" folding: 1 hidden: 2 node: { title: "main.0" } graph: { title: "main.BB1" folding: 1 color: lightblue label: "basic block 1" node: { title: "main.7" color: lightgrey label: "note 7 NOTE_INSN_BASIC_BLOCK" } edge: { sourcename: "main.7" targetname: "main.29" } node: { title: "main.29" color: green label: "insn 29 (set (reg:SI 2 cx) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) " } edge: { sourcename: "main.29" targetname: "main.30" } node: { title: "main.30" color: green label: "insn 30 (parallel [ (set (reg/f:SI 7 sp) (and:SI (reg/f:SI 7 sp) (const_int -16 [0xfffffffffffffff0]))) (clobber (reg:CC 17 flags)) ]) " } edge: { sourcename: "main.30" targetname: "main.31" } node: { title: "main.31" color: green label: "insn 31 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (mem/c:SI (plus:SI (reg:SI 2 cx) (const_int -4 [0xfffffffffffffffc])) [0 S4 A8])) " } edge: { sourcename: "main.31" targetname: "main.32" } node: { title: "main.32" color: green label: "insn 32 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (reg/f:SI 6 bp)) " } edge: { sourcename: "main.32" targetname: "main.33" } node: { title: "main.33" color: green label: "insn 33 (set (reg/f:SI 6 bp) (reg/f:SI 7 sp)) " } edge: { sourcename: "main.33" targetname: "main.34" } node: { title: "main.34" color: green label: "insn 34 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (reg:SI 2 cx)) " } edge: { sourcename: "main.34" targetname: "main.35" } node: { title: "main.35" color: green label: "insn 35 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int -4 [0xfffffffffffffffc]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) " } edge: { sourcename: "main.35" targetname: "main.9" } node: { title: "main.9" color: darkgreen label: "call_insn 9 (call (mem:QI (symbol_ref:SI (\"fun\") [flags 0x3] <function_decl 0xb7dd8180 fun>) [0 S1 A8]) (const_int 0 [0x0])) " } edge: { sourcename: "main.9" targetname: "main.11" } node: { title: "main.11" color: green label: "insn 11 (set (reg:SI 0 ax [orig:58 D.1781 ] [58]) (const_int 0 [0x0])) " } edge: { sourcename: "main.11" targetname: "main.24" } node: { title: "main.24" color: green label: "insn 24 (use (reg/i:SI 0 ax [ <result> ])) " } edge: { sourcename: "main.24" targetname: "main.38" } node: { title: "main.38" color: green label: "insn 38 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) " } edge: { sourcename: "main.38" targetname: "main.39" } node: { title: "main.39" color: green label: "insn 39 (parallel [ (set (reg:SI 2 cx) (mem:SI (reg/f:SI 7 sp) [0 S4 A8])) (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) ]) " } edge: { sourcename: "main.39" targetname: "main.40" } node: { title: "main.40" color: green label: "insn 40 (parallel [ (set (reg/f:SI 6 bp) (mem:SI (reg/f:SI 7 sp) [0 S4 A8])) (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) ]) " } edge: { sourcename: "main.40" targetname: "main.41" } node: { title: "main.41" color: green label: "insn 41 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg:SI 2 cx) (const_int -4 [0xfffffffffffffffc]))) (clobber (reg:CC 17 flags)) ]) " } edge: { sourcename: "main.41" targetname: "main.42" } node: { title: "main.42" color: darkgreen label: "jump_insn 42 (return) " } } edge: { sourcename: "main.42" targetname: "main.999999" color: blue } edge: { sourcename: "main.42" targetname: "main.999999" color: green class: 3 } node: { title: "main.999999" label: "END" } } }
;; Function fun (fun) (note 2 0 3 NOTE_INSN_DELETED) (note 3 2 6 0 NOTE_INSN_FUNCTION_BEG) ;; Start of basic block 1, registers live: 6 [bp] 7 [sp] 16 [argp] 20 [frame] (note 6 3 20 1 [bb 1] NOTE_INSN_BASIC_BLOCK) (insn/f 20 6 21 1 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (reg/f:SI 6 bp)) -1 (nil) (nil)) (insn/f 21 20 22 1 (set (reg/f:SI 6 bp) (reg/f:SI 7 sp)) -1 (nil) (nil)) (insn/f 22 21 23 1 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int -8 [0xfffffffffffffff8]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) -1 (nil) (nil)) (note 23 22 8 1 NOTE_INSN_PROLOGUE_END) (insn 8 23 9 1 (set (mem:SI (reg/f:SI 7 sp) [0 S4 A32]) (symbol_ref/f:SI ("*.LC0") [flags 0x2] <string_cst 0xb7db3d00>)) 40 {*movsi_1} (nil) (nil)) (call_insn 9 8 10 1 (set (reg:SI 0 ax) (call (mem:QI (symbol_ref:SI ("puts") [flags 0x41] <function_decl 0xb7d6e000 __builtin_puts>) [0 S1 A8]) (const_int 4 [0x4]))) 751 {*call_value_0} (nil) (nil) (nil)) (note 10 9 24 1 NOTE_INSN_FUNCTION_END) (note 24 10 25 1 NOTE_INSN_EPILOGUE_BEG) (insn 25 24 26 1 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 6 bp) (const_int 4 [0x4]))) (set (reg/f:SI 6 bp) (mem:SI (reg/f:SI 6 bp) [0 S4 A8])) (clobber (mem:BLK (scratch) [0 A8])) ]) -1 (nil) (nil)) (jump_insn 26 25 27 1 (return) -1 (nil) (nil)) ;; End of basic block 1, registers live: 6 [bp] 7 [sp] 16 [argp] 20 [frame] (barrier 27 26 19) (note 19 27 0 NOTE_INSN_DELETED) ;; Function main (main) (note 2 0 4 NOTE_INSN_DELETED) (note 4 2 7 0 NOTE_INSN_FUNCTION_BEG) ;; Start of basic block 1, registers live: 6 [bp] 7 [sp] 16 [argp] 20 [frame] (note 7 4 29 1 [bb 1] NOTE_INSN_BASIC_BLOCK) (insn/f 29 7 30 1 (set (reg:SI 2 cx) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) -1 (nil) (expr_list:REG_FRAME_RELATED_EXPR (parallel [ (set/f (reg:SI 2 cx) (unspec [ (const_int 0 [0x0]) ] 15)) (set/f (reg:SI 2 cx) (unspec [ (reg/f:SI 7 sp) ] 14)) ]) (nil))) (insn 30 29 31 1 (parallel [ (set (reg/f:SI 7 sp) (and:SI (reg/f:SI 7 sp) (const_int -16 [0xfffffffffffffff0]))) (clobber (reg:CC 17 flags)) ]) -1 (nil) (nil)) (insn/f 31 30 32 1 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (mem/c:SI (plus:SI (reg:SI 2 cx) (const_int -4 [0xfffffffffffffffc])) [0 S4 A8])) -1 (nil) (expr_list:REG_FRAME_RELATED_EXPR (set (reg/f:SI 7 sp) (unspec [ (const_int 4 [0x4]) ] 15)) (nil))) (insn/f 32 31 33 1 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (reg/f:SI 6 bp)) -1 (nil) (nil)) (insn/f 33 32 34 1 (set (reg/f:SI 6 bp) (reg/f:SI 7 sp)) -1 (nil) (nil)) (insn/f 34 33 35 1 (set (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [0 S4 A8]) (reg:SI 2 cx)) -1 (nil) (nil)) (insn/f 35 34 36 1 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int -4 [0xfffffffffffffffc]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) -1 (nil) (nil)) (note 36 35 9 1 NOTE_INSN_PROLOGUE_END) (call_insn 9 36 11 1 (call (mem:QI (symbol_ref:SI ("fun") [flags 0x3] <function_decl 0xb7dd8180 fun>) [0 S1 A8]) (const_int 0 [0x0])) 553 {*call_0} (nil) (expr_list:REG_EH_REGION (const_int 0 [0x0]) (nil)) (nil)) (insn 11 9 15 1 (set (reg:SI 0 ax [orig:58 D.1781 ] [58]) (const_int 0 [0x0])) 40 {*movsi_1} (nil) (nil)) (note 15 11 24 1 NOTE_INSN_FUNCTION_END) (insn 24 15 37 1 (use (reg/i:SI 0 ax [ <result> ])) -1 (nil) (nil)) (note 37 24 38 1 NOTE_INSN_EPILOGUE_BEG) (insn 38 37 39 1 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) (clobber (reg:CC 17 flags)) (clobber (mem:BLK (scratch) [0 A8])) ]) -1 (nil) (nil)) (insn 39 38 40 1 (parallel [ (set (reg:SI 2 cx) (mem:SI (reg/f:SI 7 sp) [0 S4 A8])) (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) ]) -1 (nil) (nil)) (insn 40 39 41 1 (parallel [ (set (reg/f:SI 6 bp) (mem:SI (reg/f:SI 7 sp) [0 S4 A8])) (set (reg/f:SI 7 sp) (plus:SI (reg/f:SI 7 sp) (const_int 4 [0x4]))) ]) -1 (nil) (nil)) (insn 41 40 42 1 (parallel [ (set (reg/f:SI 7 sp) (plus:SI (reg:SI 2 cx) (const_int -4 [0xfffffffffffffffc]))) (clobber (reg:CC 17 flags)) ]) -1 (nil) (nil)) (jump_insn 42 41 43 1 (return) -1 (nil) (nil)) ;; End of basic block 1, registers live: 0 [ax] 6 [bp] 7 [sp] 16 [argp] 20 [frame] (barrier 43 42 28) (note 28 43 0 NOTE_INSN_DELETED)