下面是debug_tree()函数的结果,可以看出expand_expr()函数到gen_rtx()函数的调用过程!
expand_expr code = 3d
<call_expr 840f0
type <integer_type 824d0 int permanent SI
size <integer_cst 8254c literal permanent 4
align 32 size_unit 8 sep_unit 32 symtab 0
sep <integer_cst 8251c literal permanent -2147483648 precision 32 min <integer_cst 8251c -2147483648>
max <integer_cst 82534 literal permanent 2147483647
pointer_to_this <pointer_type 88b4c> chain <integer_type 825bc char>
volatile
arg 0 <addr_expr 84090
type <pointer_type 98f48 type <function_type 956e8>
permanent unsigned SI size <integer_cst 8254c 4>
align 32 size_unit 8 sep_unit 32 symtab 0
arg 0 <function_decl 95740 printf type <function_type 956e8>
external public permanent used QI file /usr/include/stdio.h line 214
align 1 size_unit 1 offset 0 chain <function_decl 954d8 ungetc>
arg 1 <tree_list 83270
value <nop_expr 840d8 type <pointer_type 9117c>
literal
arg 0 <nop_expr 840c0 type <pointer_type 88a44>
literal
arg 0 <addr_expr 840a8 type <pointer_type 94f58>
literal
arg 0 <string_cst 84014 type <array_type 94ef4>
static literal "Hello, world!
"(nil)
expand_expr code = 71
<nop_expr 840d8
type <pointer_type 9117c
type <integer_type 91130 char readonly permanent QI
size <integer_cst 82638 literal permanent 1
align 8 size_unit 8 sep_unit 8 symtab 0
sep <integer_cst 82608 literal permanent -128 precision 8 min <integer_cst 82608 -128>
max <integer_cst 82620 literal permanent 127
pointer_to_this <pointer_type 9117c>
permanent unsigned SI
size <integer_cst 8254c literal permanent 4
align 32 size_unit 8 sep_unit 32 symtab 0
chain <function_type 912c0>
literal
arg 0 <nop_expr 840c0
type <pointer_type 88a44 type <integer_type 825bc char>
permanent unsigned SI size <integer_cst 8254c 4>
align 32 size_unit 8 sep_unit 32 symtab 0
chain <array_type 88a90>
literal
arg 0 <addr_expr 840a8 type <pointer_type 94f58>
literal
arg 0 <string_cst 84014 type <array_type 94ef4>
static literal "Hello, world!
"
expand_expr code = 71
<nop_expr 840c0
type <pointer_type 88a44
type <integer_type 825bc char permanent QI
size <integer_cst 82638 literal permanent 1
align 8 size_unit 8 sep_unit 8 symtab 0
sep <integer_cst 82608 literal permanent -128 precision 8 min <integer_cst 82608 -128>
max <integer_cst 82620 literal permanent 127
pointer_to_this <pointer_type 88a44> chain <integer_type 826a8 long int>
permanent unsigned SI
size <integer_cst 8254c literal permanent 4
align 32 size_unit 8 sep_unit 32 symtab 0
chain <array_type 88a90>
literal
arg 0 <addr_expr 840a8
type <pointer_type 94f58 type <array_type 94ef4>
unsigned SI size <integer_cst 8254c 4>
align 32 size_unit 8 sep_unit 32 symtab 0
literal
arg 0 <string_cst 84014 type <array_type 94ef4>
static literal "Hello, world!
"
expand_expr code = 74
<addr_expr 840a8
type <pointer_type 94f58
type <array_type 94ef4 type <integer_type 825bc char>
BLK
size <integer_cst 94f40 literal 15
align 8 size_unit 8 sep_unit 8 symtab 0
sep <integer_cst 82638 literal permanent 1 domain <integer_type 94ea8>
pointer_to_this <pointer_type 94f58> chain <pointer_type 94f58>
unsigned SI
size <integer_cst 8254c literal permanent 4
align 32 size_unit 8 sep_unit 32 symtab 0
literal
arg 0 <string_cst 84014 type <array_type 94ef4>
static literal "Hello, world!
"
expand_expr code = 26
<string_cst 84014
type <array_type 94ef4
type <integer_type 825bc char permanent QI
size <integer_cst 82638 literal permanent 1
align 8 size_unit 8 sep_unit 8 symtab 0
sep <integer_cst 82608 literal permanent -128 precision 8 min <integer_cst 82608 -128>
max <integer_cst 82620 literal permanent 127
pointer_to_this <pointer_type 88a44> chain <integer_type 826a8 long int>
BLK
size <integer_cst 94f40 literal 15
align 8 size_unit 8 sep_unit 8 symtab 0 sep <integer_cst 82638 1>
domain <integer_type 94ea8 SI
size <integer_cst 8254c literal permanent 4
align 32 size_unit 8 sep_unit 32 symtab 0
sep <integer_cst 84048 literal 0 precision 32 min <integer_cst 84048 0>
max <integer_cst 84078 literal 14
pointer_to_this <pointer_type 94f58> chain <pointer_type 94f58>
static literal "Hello, world!
"
(symbol_ref:SI ("*LC0"))
(mem:BLK (symbol_ref:SI ("*LC0")))
(pre_dec:SI (reg:SI 7))
(mem:SI (pre_dec:SI (reg:SI 7)))
(set (mem:SI (pre_dec:SI (reg:SI 7)))
(symbol_ref:SI ("*LC0")))
(insn_list 6 (nil))
(insn_list 2 (insn_list 6 (nil)))
(sequence[ ] )
(reg:SI 0)
(const_int 4)
emit_call_1 funexp symbol_ref
(mem:QI (symbol_ref/v:SI ("printf")))
(call (mem:QI (symbol_ref/v:SI ("printf")))
(const_int 4))
(set (reg:SI 0)
(call (mem:QI (symbol_ref/v:SI ("printf")))
(const_int 4)))
emit_call_insn
原文地址:http://blog.csdn.net/oldlinux/article/details/42403479