| |||||||||||||||||||||||||||||
|
Hi, I am looking at some part of GCC source code which does the translation from GIMPLE to RTL. I created an example, having two consecutive instructions, one with "div" and other with "mod". Example: int a, b, c, d; a = b / c; d = b % c; The first-cut RTL code corresponding to these two instructions is a PARALLEL INSN, with two SET INSNs, one with "div" and other with "mod". (insn 22 21 23 1 (parallel [ (set (reg:SI 70) (div:SI (reg:SI 72) (mem/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -8 [0xfffffff8])) [0 c+0 S4 A32]))) (set (reg:SI 71) (mod:SI (reg:SI 72) (mem/i:SI (plus:SI (reg/f:SI 54 virtual-stack-vars) (const_int -8 [0xfffffff8])) [0 c+0 S4 A32]))) ) I am unable to understand how a single INSN gets generated for these two instructions. The GIMPLE code has two different tree nodes for the two instructions, namely "trunc_div_expr" and "trunc_mod_expr". So there should be two different INSNs. My guess is, some pass, like "combine", must be combining two INSNs into one. I looked at functions in file "combine.c", but no function in that file is called! Can anybody suggest something? I am really stuck at this point And can't proceed any further. Regards, Amruta Gokhale Graduate Student IIT Bombay, Mumbai.
| ||||||||||||||||||||||||||||
© 2004-2008 readlist.com