--- Begin Message ---
- From: kripashankar <kripa82 at yahoo dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Thu, 10 Jun 2004 14:51:13 -0700 (PDT)
- Subject: RTL help needed
Iam using an arm-linux-gcc-3.3 toolchain..
This is my sample program
int main()
{
int i = 9;
i += 10;
return 0;
}
and the RTL dump after all the optimization passes
looks like this
;; Function main
(note 2 0 3 NOTE_INSN_DELETED)
(note 3 2 28 NOTE_INSN_FUNCTION_BEG)
;; Start of basic block 0, registers live: 11 [fp] 13
[sp] 25 [sfp] 26 [afp]
(note 28 3 32 [bb 0] NOTE_INSN_BASIC_BLOCK)
(insn/f 32 28 33 (nil) (set (reg:SI 12 ip)
(reg/f:SI 13 sp)) 161 {*arm_movsi_insn} (nil)
(nil))
(insn/f 33 32 34 (nil) (parallel [
(set (mem:BLK (pre_dec:BLK (reg/f:SI 13
sp)) [0 A8])
(unspec:BLK [
(reg/f:SI 11 fp)
] 2))
(use (reg:SI 12 ip))
(use (reg:SI 14 lr))
(use (reg:SI 15 pc))
]) 326 {*push_multi} (nil)
(expr_list:REG_FRAME_RELATED_EXPR (sequence [
(set/f:SI (reg/f:SI 13 sp)
(plus:SI (reg/f:SI 13 sp)
(const_int -16 [0xfffffff0])))
(set/f (mem:SI (reg/f:SI 13 sp) [0 S4
A32])
(reg/f:SI 11 fp))
(set/f (mem:SI (plus:SI (reg/f:SI 13
sp)
(const_int 4 [0x4])) [0 S4
A32])
(reg:SI 12 ip))
(set/f (mem:SI (plus:SI (reg/f:SI 13
sp)
(const_int 8 [0x8])) [0 S4
A32])
(reg:SI 14 lr))
])
(nil)))
(insn/f 34 33 35 (nil) (set (reg/f:SI 11 fp)
(plus:SI (reg:SI 12 ip)
(const_int -4 [0xfffffffc]))) 4
{*arm_addsi3} (nil)
(nil))
(insn/f 35 34 36 (nil) (set (reg/f:SI 13 sp)
(plus:SI (reg/f:SI 13 sp)
(const_int -4 [0xfffffffc]))) 4
{*arm_addsi3} (nil)
(nil))
(insn 36 35 37 (nil) (set (mem:BLK (scratch) [0 A8])
(unspec:BLK [
(reg/f:SI 13 sp)
(reg/f:SI 11 fp)
] 5)) 327 {stack_tie} (nil)
(nil))
(note 37 36 8 NOTE_INSN_PROLOGUE_END)
(insn 8 37 9 0x4001a294 (set (reg:SI 1 r1 [37])
(const_int 9 [0x9])) 161 {*arm_movsi_insn}
(nil)
(expr_list:REG_EQUAL (const_int 9 [0x9])
(nil)))
(insn 9 8 11 0x4001a294 (set (mem/f:SI (plus:SI
(reg/f:SI 11 fp)
(const_int -16 [0xfffffff0])) [0 i+0
S4 A32])
(reg:SI 1 r1 [37])) 161 {*arm_movsi_insn}
(nil)
(nil))
(insn 11 9 12 0x4001a294 (set (reg:SI 1 r1 [38])
(mem/f:SI (plus:SI (reg/f:SI 11 fp)
(const_int -16 [0xfffffff0])) [0 i+0
S4 A32])) 161 {*arm_movsi_insn} (nil)
(nil))
(insn 12 11 13 0x4001a294 (set (reg:SI 1 r1 [38])
(plus:SI (reg:SI 1 r1 [38])
(const_int 10 [0xa]))) 4 {*arm_addsi3}
(nil)
(nil))
(insn 13 12 17 0x4001a294 (set (mem/f:SI (plus:SI
(reg/f:SI 11 fp)
(const_int -16 [0xfffffff0])) [0 i+0
S4 A32])
(reg:SI 1 r1 [38])) 161 {*arm_movsi_insn}
(nil)
(nil))
(insn 17 13 21 0x4001a294 (set (reg:SI 0 r0 [39])
(const_int 0 [0x0])) 161 {*arm_movsi_insn}
(nil)
(nil))
(note 21 17 27 NOTE_INSN_FUNCTION_END)
(insn 27 21 41 0x4001a2c0 (use (reg/i:SI 0 r0)) -1
(nil)
(nil))
(insn 41 27 38 (nil) (set (reg:SI 9 r9 [0])
(const_int 3 [0x3])) -1 (nil)
(nil))
(note 38 41 39 NOTE_INSN_EPILOGUE_BEG)
(jump_insn 39 38 40 (nil) (return) 242 {return} (nil)
(nil))
;; End of basic block 0, registers live:
0 [r0] 11 [fp] 13 [sp] 25 [sfp] 26 [afp]
(barrier 40 39 31)
(note 31 40 0 NOTE_INSN_DELETED)
-----------------------------
There are two tree addresses - 0x4001a294 and
0x4001a2c0.. How are they related to each other??
I also tried inserting a RTL strcuture using the
following code
rtx rcode, insn
....
....
rcode = rtx_alloc(SET);
XEXP(rcode, 0) = rtx_alloc(REG);
PUT_MODE(XEXP(rcode, 0), SImode);
XINT(XEXP(rcode, 0), 0) = 9; /* arbitrary register
no 9 */
XEXP(rcode, 1) = rtx_alloc(CONST_INT);
XINT(XEXP(rcode, 1), 0) = 21; /* some constant
number 21 */
emit_insn_after(rcode, insn);
but it gives me an internal compiler error in the
final() function of the final.c file. so how can i
insert an instruction with tree address 0x4001a294..
what are the steps to insert an insertion in RTL form
??
I appreciate any kind of help.
kripa
__________________________________
Do you Yahoo!?
Friends. Fun. Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/
--- End Message ---