X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firnode.h;h=06f52eff21b516699263e7695ee2065f0ec147d0;hb=8eba666265da97ca53dc7b81bb1ee981833e435e;hp=ca9377bef79b4ac435d95761e28730f5bd4a2efc;hpb=dae26cfe54b2f992bd781091ca9c94035bbf981f;p=libfirm diff --git a/ir/ir/irnode.h b/ir/ir/irnode.h index ca9377bef..06f52eff2 100644 --- a/ir/ir/irnode.h +++ b/ir/ir/irnode.h @@ -1,16 +1,30 @@ /* - * Project: libFIRM - * File name: ir/ir/irnode.h - * Purpose: Representation of an intermediate operation. - * Author: Martin Trapp, Christian Schaefer - * Modified by: Goetz Lindenmaier, Michael Beck - * Created: - * CVS-ID: $Id$ - * Copyright: (c) 1998-2006 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. */ -#ifndef _FIRM_IR_IRNODE_H_ -#define _FIRM_IR_IRNODE_H_ + +/** + * @file + * @brief Representation of an intermediate operation. + * @author Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Michael Beck + * @version $Id$ + */ +#ifndef FIRM_IR_IRNODE_H +#define FIRM_IR_IRNODE_H #include @@ -540,21 +554,21 @@ ir_type *get_SymConst_type(ir_node *node); void set_SymConst_type(ir_node *node, ir_type *tp); /** Only to access SymConst of kind addr_name. Else assertion: */ -ident *get_SymConst_name(ir_node *node); +ident *get_SymConst_name(const ir_node *node); void set_SymConst_name(ir_node *node, ident *name); /** Only to access SymConst of kind addr_ent. Else assertion: */ -ir_entity *get_SymConst_entity(ir_node *node); +ir_entity *get_SymConst_entity(const ir_node *node); void set_SymConst_entity(ir_node *node, ir_entity *ent); /** Only to access SymConst of kind symconst_enum_const. Else assertion: */ -ir_enum_const *get_SymConst_enum(ir_node *node); +ir_enum_const *get_SymConst_enum(const ir_node *node); void set_SymConst_enum(ir_node *node, ir_enum_const *ec); /** Sets both: type and ptrinfo. Needed to treat the node independent of its semantics. Does a memcpy for the memory sym points to. */ /* write 'union': firmjni then does not create a method... */ -union symconst_symbol get_SymConst_symbol(ir_node *node); +union symconst_symbol get_SymConst_symbol(const ir_node *node); void set_SymConst_symbol(ir_node *node, union symconst_symbol sym); @@ -647,35 +661,35 @@ void set_CallBegin_call(ir_node *node, ir_node *call); binops are: Add, Sub, Mul, Quot, DivMod, Div, Mod, And, Or, Eor, Shl, Shr, Shrs, Rot, Cmp */ int is_unop(const ir_node *node); -ir_node *get_unop_op(ir_node *node); +ir_node *get_unop_op(const ir_node *node); void set_unop_op(ir_node *node, ir_node *op); int is_binop(const ir_node *node); -ir_node *get_binop_left(ir_node *node); +ir_node *get_binop_left(const ir_node *node); void set_binop_left(ir_node *node, ir_node *left); -ir_node *get_binop_right(ir_node *node); +ir_node *get_binop_right(const ir_node *node); void set_binop_right(ir_node *node, ir_node *right); -ir_node *get_Add_left(ir_node *node); +ir_node *get_Add_left(const ir_node *node); void set_Add_left(ir_node *node, ir_node *left); -ir_node *get_Add_right(ir_node *node); +ir_node *get_Add_right(const ir_node *node); void set_Add_right(ir_node *node, ir_node *right); -ir_node *get_Sub_left(ir_node *node); +ir_node *get_Sub_left(const ir_node *node); void set_Sub_left(ir_node *node, ir_node *left); -ir_node *get_Sub_right(ir_node *node); +ir_node *get_Sub_right(const ir_node *node); void set_Sub_right(ir_node *node, ir_node *right); -ir_node *get_Minus_op(ir_node *node); +ir_node *get_Minus_op(const ir_node *node); void set_Minus_op(ir_node *node, ir_node *op); -ir_node *get_Mul_left(ir_node *node); +ir_node *get_Mul_left(const ir_node *node); void set_Mul_left(ir_node *node, ir_node *left); -ir_node *get_Mul_right(ir_node *node); +ir_node *get_Mul_right(const ir_node *node); void set_Mul_right(ir_node *node, ir_node *right); -ir_node *get_Quot_left(ir_node *node); +ir_node *get_Quot_left(const ir_node *node); void set_Quot_left(ir_node *node, ir_node *left); -ir_node *get_Quot_right(ir_node *node); +ir_node *get_Quot_right(const ir_node *node); void set_Quot_right(ir_node *node, ir_node *right); ir_node *get_Quot_mem(ir_node *node); void set_Quot_mem(ir_node *node, ir_node *mem); @@ -690,9 +704,9 @@ typedef enum { pn_Quot_max /**< number of projections from a Quot */ } pn_Quot; /* Projection numbers for Quot. */ -ir_node *get_DivMod_left(ir_node *node); +ir_node *get_DivMod_left(const ir_node *node); void set_DivMod_left(ir_node *node, ir_node *left); -ir_node *get_DivMod_right(ir_node *node); +ir_node *get_DivMod_right(const ir_node *node); void set_DivMod_right(ir_node *node, ir_node *right); ir_node *get_DivMod_mem(ir_node *node); void set_DivMod_mem(ir_node *node, ir_node *mem); @@ -708,9 +722,9 @@ typedef enum { pn_DivMod_max /**< number of projections from a DivMod */ } pn_DivMod; /* Projection numbers for DivMod. */ -ir_node *get_Div_left(ir_node *node); +ir_node *get_Div_left(const ir_node *node); void set_Div_left(ir_node *node, ir_node *left); -ir_node *get_Div_right(ir_node *node); +ir_node *get_Div_right(const ir_node *node); void set_Div_right(ir_node *node, ir_node *right); ir_node *get_Div_mem(ir_node *node); void set_Div_mem(ir_node *node, ir_node *mem); @@ -725,9 +739,9 @@ typedef enum { pn_Div_max /**< number of projections from a Div */ } pn_Div; /* Projection numbers for Div. */ -ir_node *get_Mod_left(ir_node *node); +ir_node *get_Mod_left(const ir_node *node); void set_Mod_left(ir_node *node, ir_node *left); -ir_node *get_Mod_right(ir_node *node); +ir_node *get_Mod_right(const ir_node *node); void set_Mod_right(ir_node *node, ir_node *right); ir_node *get_Mod_mem(ir_node *node); void set_Mod_mem(ir_node *node, ir_node *mem); @@ -742,25 +756,25 @@ typedef enum { pn_Mod_max /**< number of projections from a Mod */ } pn_Mod; /* Projection numbers for Mod. */ -ir_node *get_Abs_op(ir_node *node); +ir_node *get_Abs_op(const ir_node *node); void set_Abs_op(ir_node *node, ir_node *op); -ir_node *get_And_left(ir_node *node); +ir_node *get_And_left(const ir_node *node); void set_And_left(ir_node *node, ir_node *left); -ir_node *get_And_right(ir_node *node); +ir_node *get_And_right(const ir_node *node); void set_And_right(ir_node *node, ir_node *right); -ir_node *get_Or_left(ir_node *node); +ir_node *get_Or_left(const ir_node *node); void set_Or_left(ir_node *node, ir_node *left); -ir_node *get_Or_right(ir_node *node); +ir_node *get_Or_right(const ir_node *node); void set_Or_right(ir_node *node, ir_node *right); -ir_node *get_Eor_left(ir_node *node); +ir_node *get_Eor_left(const ir_node *node); void set_Eor_left(ir_node *node, ir_node *left); -ir_node *get_Eor_right(ir_node *node); +ir_node *get_Eor_right(const ir_node *node); void set_Eor_right(ir_node *node, ir_node *right); -ir_node *get_Not_op(ir_node *node); +ir_node *get_Not_op(const ir_node *node); void set_Not_op(ir_node *node, ir_node *op); /** @@ -800,32 +814,32 @@ int get_negated_pnc(int pnc, ir_mode *mode); /** Calculates the inversed (R^-1) pnc condition, i.e., "<" --> ">" */ int get_inversed_pnc(int pnc); -ir_node *get_Cmp_left(ir_node *node); +ir_node *get_Cmp_left(const ir_node *node); void set_Cmp_left(ir_node *node, ir_node *left); -ir_node *get_Cmp_right(ir_node *node); +ir_node *get_Cmp_right(const ir_node *node); void set_Cmp_right(ir_node *node, ir_node *right); -ir_node *get_Shl_left(ir_node *node); +ir_node *get_Shl_left(const ir_node *node); void set_Shl_left(ir_node *node, ir_node *left); -ir_node *get_Shl_right(ir_node *node); +ir_node *get_Shl_right(const ir_node *node); void set_Shl_right(ir_node *node, ir_node *right); -ir_node *get_Shr_left(ir_node *node); +ir_node *get_Shr_left(const ir_node *node); void set_Shr_left(ir_node *node, ir_node *left); -ir_node *get_Shr_right(ir_node *node); +ir_node *get_Shr_right(const ir_node *node); void set_Shr_right(ir_node *node, ir_node *right); -ir_node *get_Shrs_left(ir_node *node); +ir_node *get_Shrs_left(const ir_node *node); void set_Shrs_left(ir_node *node, ir_node *left); -ir_node *get_Shrs_right(ir_node *node); +ir_node *get_Shrs_right(const ir_node *node); void set_Shrs_right(ir_node *node, ir_node *right); -ir_node *get_Rot_left(ir_node *node); +ir_node *get_Rot_left(const ir_node *node); void set_Rot_left(ir_node *node, ir_node *left); -ir_node *get_Rot_right(ir_node *node); +ir_node *get_Rot_right(const ir_node *node); void set_Rot_right(ir_node *node, ir_node *right); -ir_node *get_Conv_op(ir_node *node); +ir_node *get_Conv_op(const ir_node *node); void set_Conv_op(ir_node *node, ir_node *op); int get_Conv_strict(ir_node *node); void set_Conv_strict(ir_node *node, int flag); @@ -836,7 +850,7 @@ void set_Conv_strict(ir_node *node, int flag); * are accessed in the cast. This required some precaution, to * get the right memory into the Loads generated from the cast. */ -ir_node *get_Cast_op(ir_node *node); +ir_node *get_Cast_op(const ir_node *node); void set_Cast_op(ir_node *node, ir_node *op); ir_type *get_Cast_type(ir_node *node); void set_Cast_type(ir_node *node, ir_type *to_tp); @@ -987,6 +1001,9 @@ void set_Proj_pred(ir_node *node, ir_node *pred); /** Return the projection number of a Proj node. */ long get_Proj_proj(const ir_node *node); void set_Proj_proj(ir_node *node, long proj); +long get_VProj_proj(const ir_node *node); +void set_VProj_proj(ir_node *node, long value); + ir_node **get_Tuple_preds_arr(ir_node *node); int get_Tuple_n_preds(ir_node *node); @@ -1108,7 +1125,7 @@ ir_node *get_Bound_upper(ir_node *bound); void set_Bound_upper(ir_node *bound, ir_node *upper); /** Return the operand of a Pin node. */ -ir_node *get_Pin_op(ir_node *pin); +ir_node *get_Pin_op(const ir_node *pin); void set_Pin_op(ir_node *pin, ir_node *node); @@ -1137,6 +1154,8 @@ ir_node *skip_Confirm(ir_node *node); ir_node *skip_HighLevel(ir_node *node); /** returns true if irn is a Const node. */ int is_Const(const ir_node *node); +/** returns true if a node is a Conv node */ +int is_Conv(const ir_node *node); /** returns true if node is a Bad node. */ int is_Bad(const ir_node *node); /** returns true if node is a NoMem node. */ @@ -1151,6 +1170,10 @@ int is_Div(const ir_node *node); int is_DivMod(const ir_node *node); /** return true if node is a Quot node. */ int is_Quot(const ir_node *node); +/** return true if node is an Add node. */ +int is_Add(const ir_node *node); +/** return true if node is a Sub node. */ +int is_Sub(const ir_node *node); /** returns true if the node is not a Block */ int is_no_Block(const ir_node *node); /** returns true if the node is a Block */ @@ -1163,6 +1186,8 @@ int is_Return(const ir_node *node); int is_Call(const ir_node *node); /** returns true if node is a Sel node. */ int is_Sel(const ir_node *node); +/** returns true if node is a Mul node. */ +int is_Mul(const ir_node *node); /** returns true if node is a Mux node or a Psi with only one condition. */ int is_Mux(const ir_node *node); /** returns true if node is a Load node. */ @@ -1309,7 +1334,7 @@ unsigned register_additional_node_data(unsigned size); * Return a pointer to the node attributes. * Needed for user-defined nodes. */ -void *get_irn_generic_attr(ir_node *node); +void *get_irn_generic_attr(const ir_node *node); /** * Returns the unique node index for the node in its graph. @@ -1379,4 +1404,4 @@ int dump_node_opcode(FILE *F, ir_node *n); } #endif -#endif /* _FIRM_IR_IRNODE_H_ */ +#endif