X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeinsn_t.h;h=8c8c953b7907f839e67170cb65869c73df23c040;hb=0a8dac2b5fb9e59ea2add322baf61237b607bea5;hp=a1e93d12b3273671f5ab1005afa76dc5468c3587;hpb=ab182d4b9ed44239ab3ff1d08b2f8e14a3699ccf;p=libfirm diff --git a/ir/be/beinsn_t.h b/ir/be/beinsn_t.h index a1e93d12b..8c8c953b7 100644 --- a/ir/be/beinsn_t.h +++ b/ir/be/beinsn_t.h @@ -21,56 +21,41 @@ * @file * @brief A data structure to treat nodes and node-proj collections uniformly. * @author Sebastian Hack - * @version $Id$ */ #ifndef FIRM_BE_BEINSN_T_H #define FIRM_BE_BEINSN_T_H #include "firm_types.h" #include "bitset.h" -#include "obst.h" #include "bearch.h" -#include "beirg.h" +#include "bechordal.h" typedef struct be_operand_t be_operand_t; typedef struct be_insn_t be_insn_t; -typedef struct be_insn_env_t be_insn_env_t; struct be_operand_t { - ir_node *irn; /**< Firm node of the insn this operand belongs to */ - ir_node *carrier; /**< node representing the operand value (Proj or the node itself for defs, the used value for uses) */ - be_operand_t *partner; /**< used in bechordal later... (TODO what does it do?) */ - bitset_t *regs; /**< admissible register bitset */ - int pos; /**< pos of the operand (0 to n are inputs, -1 to -n are outputs) */ - const arch_register_req_t *req; /**< register constraints for the carrier node */ - unsigned has_constraints : 1; /**< the carrier node has register constraints (the constraint type is limited) */ + ir_node *carrier; /**< node representing the operand value (Proj or the node itself for defs, the used value for uses) */ + be_operand_t *partner; /**< used in bechordal later... (TODO what does it do?) */ + unsigned const *regs; /**< admissible register bitset */ }; struct be_insn_t { - be_operand_t *ops; /**< the values used and defined by the insn */ - int n_ops; /**< length of the ops array */ - int use_start; /**< entries [0-use_start) in ops are defs, - [use_start-n_ops) uses */ - ir_node *next_insn; /**< next instruction in schedule */ - ir_node *irn; /**< ir_node of the instruction */ - unsigned in_constraints : 1; /**< instruction has input constraints */ - unsigned out_constraints : 1; /**< instruction has output constraints */ - unsigned has_constraints : 1; /**< in_constraints or out_constraints true */ - unsigned pre_colored : 1; /**< all defined values already have a register assigned */ + be_operand_t *ops; /**< the values used and defined by the insn */ + int n_ops; /**< length of the ops array */ + int use_start; /**< entries [0-use_start) in ops are defs, + [use_start-n_ops) uses */ + ir_node *irn; /**< ir_node of the instruction */ }; -struct be_insn_env_t { - struct obstack *obst; - const arch_register_class_t *cls; - bitset_t *ignore_colors; -}; - -#define be_insn_n_defs(insn) ((insn)->use_start) -#define be_insn_n_uses(insn) ((insn)->n_ops - (insn)->use_start) - -be_insn_t *be_scan_insn(const be_insn_env_t *env, ir_node *irn); - -be_insn_env_t *be_insn_env_init(be_insn_env_t *ie, ir_graph *irg, const arch_register_class_t *cls, struct obstack *obst); +/** + * Create a be_insn_t for an IR node. + * + * @param env the insn construction environment + * @param irn the irn for which the be_insn should be build + * + * @return the be_insn for the IR node + */ +be_insn_t *be_scan_insn(be_chordal_env_t *env, ir_node *irn); #endif /* FIRM_BE_BEINSN_T_H */