GCC Middle and Back End API Reference
|
#include <cfgloop.h>
Data Fields | |
rtx | base |
rtx | step |
enum iv_extend_code | extend |
rtx | delta |
rtx | mult |
enum machine_mode | extend_mode |
enum machine_mode | mode |
unsigned | first_special: 1 |
Induction variable analysis. The description of induction variable. The things are a bit complicated due to need to handle subregs and extends. The value of the object described by it can be obtained as follows (all computations are done in extend_mode):
Value in i-th iteration is delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)).
If first_special is true, the value in the first iteration is delta + mult * base
If extend = UNKNOWN, first_special must be false, delta 0, mult 1 and value is subreg_{mode} (base + i * step)
The get_iv_value function can be used to obtain these expressions.
??? Add a third mode field that would specify the mode in that inner computation is done, which would enable it to be different from the outer one?
rtx rtx_iv::base |
Its base and step (mode of base and step is supposed to be extend_mode, see the description above).
Referenced by iv_extend(), and record_biv().
rtx rtx_iv::delta |
Operations applied in the extended mode.
Referenced by iv_extend(), and iv_mult().
enum iv_extend_code rtx_iv::extend |
The type of extend applied to it (IV_SIGN_EXTEND, IV_ZERO_EXTEND, or IV_UNKNOWN_EXTEND).
Referenced by iv_extend().
enum machine_mode rtx_iv::extend_mode |
The mode it is extended to.
Referenced by analyze_insn_to_expand_var(), and iv_extend().
unsigned rtx_iv::first_special |
Whether the first iteration needs to be handled specially.
enum machine_mode rtx_iv::mode |
The mode the variable iterates in.
Referenced by analyze_insn_to_expand_var().
rtx rtx_iv::mult |
Referenced by iv_extend(), and iv_mult().
rtx rtx_iv::step |
Referenced by analyze_insn_to_expand_var(), and iv_extend().