X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbenode_t.h;h=ae58eb0d45721d9d7ccd7c5254576ec5493f4dbe;hb=e46543287024a67217991be317e9692984939659;hp=ff0af86c82ab45084c8fd68bbea70a7696eb92e4;hpb=1ec30d95387eb392ba5a1adc7958ebd91383d59c;p=libfirm diff --git a/ir/be/benode_t.h b/ir/be/benode_t.h index ff0af86c8..ae58eb0d4 100644 --- a/ir/be/benode_t.h +++ b/ir/be/benode_t.h @@ -157,6 +157,20 @@ void be_set_Copy_op(ir_node *cpy, ir_node *op); * Make a new Perm node. */ ir_node *be_new_Perm(const arch_register_class_t *cls, ir_graph *irg, ir_node *bl, int arity, ir_node *in[]); + +/** + * Reduce a Perm. + * Basically, we provide a map to remap the Perm's arguments. If an entry in the + * map is -1, the argument gets deleted. + * This function takes care, that the register data and the input array reflects + * the changes described by the map. + * This is needed by the Perm optimization/movement in belower.c, see push_through_perm(). + * @param perm The perm node. + * @param new_size The new number of arguments (must be smaller or equal to the current one). + * @param map A map assigning each operand a new index (or -1 to indicate deletion). + */ +void be_Perm_reduce(ir_node *perm, int new_size, int *map); + /** * Create a new MemPerm node. */ @@ -195,8 +209,12 @@ enum { be_pos_FrameAddr_ptr = 0 }; +/** Create a new FrameAddr node. */ ir_node *be_new_FrameAddr(const arch_register_class_t *cls_frame, ir_graph *irg, ir_node *bl, ir_node *frame, ir_entity *ent); +/** Return the frame input of a FrameAddr node. */ +ir_node *be_get_FrameAddr_frame(ir_node *node); + /** * Position numbers for the be_AddSP inputs */ @@ -316,7 +334,18 @@ typedef enum { } pn_be_Call; /** - * Construct a new be_Call + * Construct a new be_Call. + * + * @param dbg debug info + * @param irg the graph where the call is placed + * @param bl the block where the call is placed + * @param mem the memory input of the call + * @param sp the stack pointer input of the call + * @param ptr the address of the called function, if immediate call set to sp + * @param n_outs the number of outcoming values from this call + * @param n the number of (register) inputs of this call + * @param in the (register) inputs of this call + * @param call_tp the call type of this call */ ir_node *be_new_Call(dbg_info *dbg, ir_graph *irg, ir_node *bl, ir_node *mem, ir_node *sp, ir_node *ptr, int n_outs, int n, ir_node *in[], ir_type *call_tp);