|
GCC Middle and Back End API Reference
|
Go to the source code of this file.
Data Structures | |
| struct | du_head |
| struct | du_chain |
| struct | operand_rr_info |
| struct | insn_rr_info |
Typedefs | |
| typedef struct du_head * | du_head_p |
Functions | |
| void | regrename_init (bool) |
| void | regrename_finish (void) |
| void | regrename_analyze (bitmap) |
| du_head_p | regrename_chain_from_id (unsigned int) |
| int | find_best_rename_reg (du_head_p, enum reg_class, HARD_REG_SET *, int) |
| void | regrename_do_replace (du_head_p, int) |
Variables | |
| vec< insn_rr_info > | insn_rr |
| int find_best_rename_reg | ( | du_head_p | this_head, |
| enum reg_class | super_class, | ||
| HARD_REG_SET * | unavailable, | ||
| int | old_reg | ||
| ) |
For the chain THIS_HEAD, compute and return the best register to rename to. SUPER_CLASS is the superunion of register classes in the chain. UNAVAILABLE is a set of registers that cannot be used. OLD_REG is the register currently used for the chain.
Further narrow the set of registers we can use for renaming.
If the chain needs a call-saved register, mark the call-used
registers as unavailable. Mark registers that overlap this chain's lifetime as unavailable.
Compute preferred rename class of super union of all the classes
in the chain. If PREFERRED_CLASS is not NO_REGS, we iterate in the first pass
over registers that belong to PREFERRED_CLASS and try to find the
best register within the class. If that failed, we iterate in
the second pass over registers that don't belong to the class.
If PREFERRED_CLASS is NO_REGS, we iterate over all registers in
ascending order without any preference. In the first pass, we force the renaming of registers that
don't belong to PREFERRED_CLASS to registers that do, even
though the latters were used not very long ago.
References check_new_reg_p(), and tick.
| void regrename_analyze | ( | bitmap | ) |
| du_head_p regrename_chain_from_id | ( | unsigned | int | ) |
| void regrename_do_replace | ( | du_head_p | , |
| int | |||
| ) |
| void regrename_finish | ( | void | ) |
Free all global data used by the register renamer.
| void regrename_init | ( | bool | ) |
| vec<insn_rr_info> insn_rr |
If nonnull, the code calling into the register renamer requested information about insn operands, and we store it here.