From 9ab3d84833ffff735112b3a08558aa83258121ba Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Fri, 7 Dec 2007 00:29:55 +0000 Subject: [PATCH] Add an ir_mode * parameter to all SymConst constructors (avoiding the "builtin" mode_Is/mode_P_data) [r16911] --- include/libfirm/ircons.h | 556 +++++++++++++++-------------- ir/be/ppc32/ppc32_transform_conv.c | 2 +- ir/ir/ircons.c | 71 ++-- ir/ir/iropt.c | 4 +- ir/ir/irprofile.c | 12 +- ir/lower/lower_dw.c | 2 +- ir/lower/lower_hl.c | 10 +- ir/lower/lower_intrinsics.c | 2 +- ir/opt/proc_cloning.c | 4 +- ir/tr/entity.c | 8 +- 10 files changed, 342 insertions(+), 329 deletions(-) diff --git a/include/libfirm/ircons.h b/include/libfirm/ircons.h index fad4db273..44f85ac79 100644 --- a/include/libfirm/ircons.h +++ b/include/libfirm/ircons.h @@ -42,7 +42,7 @@ * * documentation no more supported since 2001 * - * ir node construction. + * IR node construction. * * This file documents all datatypes and constructors needed to * build a FIRM representation of a procedure. The constructors are @@ -56,7 +56,7 @@ * Three kinds of nodes * -------------------- * - * There are three kinds of nodes known to the ir: entities, + * There are three kinds of nodes known to the IR: entities, * types, and ir_nodes * * + ir_nodes are the actual nodes of the FIRM intermediate representation. @@ -99,7 +99,7 @@ * dataflow graph with reversed edges. It has to be traversed bottom * up. * - * All nodes of the ir have the same basic structure. They are + * All nodes of the IR have the same basic structure. They are * distinguished by a field containing the opcode. * * The fields of an ir_node: @@ -116,7 +116,7 @@ * result. A Firm mode is a datatype as known to the target, * not a type of the source language. * - * visit A flag for traversing the ir. + * visit A flag for traversing the IR. * * **in An array with pointers to the node's predecessors. * @@ -266,7 +266,7 @@ * ir_node *new_Cond (ir_node *c); * ir_node *new_Return (ir_node *store, int arity, ir_node **in); * ir_node *new_Const (ir_mode *mode, tarval *con); - * ir_node *new_SymConst (symconst_symbol value, symconst_kind kind); + * ir_node *new_SymConst (ir_mode *mode, symconst_symbol value, symconst_kind kind); * ir_node *new_simpleSel (ir_node *store, ir_node *objptr, ir_entity *ent); * ir_node *new_Sel (ir_node *store, ir_node *objptr, int arity, * ir_node **in, ir_entity *ent); @@ -362,7 +362,7 @@ * in some block that is control flow dependent on this block, the construction * is correct. * - * Example for faulty ir construction: (draw the graph on a paper and you'll + * Example for faulty IR construction: (draw the graph on a paper and you'll * get it ;-) * * block_before_loop = new_block(); @@ -532,16 +532,16 @@ * attr.con A tarval* pointer to the proper entry in the constant * table. * - * ir_node *new_SymConst (union symconst_symbol value, symconst_addr_ent kind) - * --------------------------------------------------------------------------- + * ir_node *new_SymConst (ir_mode *mode,union symconst_symbol value, symconst_addr_ent kind) + * ----------------------------------------------------------------------------------------- * - * There are three kinds of symbolic constants: + * There are three five of symbolic constants: * symconst_type_tag The symbolic constant represents a type tag. * symconst_type_size The symbolic constant represents the size of a type. * symconst_type_align The symbolic constant represents the alignment of a type. * symconst_addr_name Information for the linker, e.g. the name of a global * variable. - * symconst_addr_name The symbolic constant represents the address of an entity. + * symconst_addr_ent The symbolic constant represents the address of an entity. * * To represent a pointer to an entity that is represented by an entity * datastructure don't use @@ -558,9 +558,9 @@ * representing the linkage info. * * Inputs: - * No inputs except the block it belogns to. + * No inputs except the block it belongs to. * Output: - * An unsigned integer (I_u) or a pointer (P). + * A symbolic constant. * * Attributes: * attr.i.num The symconst_addr_ent, i.e. one of @@ -568,14 +568,14 @@ * -symconst_type_size * -symconst_type_align * -symconst_addr_name + * -symconst_addr_ent * * If the attr.i.num is symconst_type_tag, symconst_type_size or symconst_type_align, * the node contains an attribute: * - * attr.i.*type, a pointer to a type_class. The mode of the node is mode_Is. + * attr.i.*type, a pointer to a type_class. * if it is linkage_ptr_info it contains - * attr.i.*ptrinfo, an ident holding information for the linker. The mode - * of the node is mode_P_mach. + * attr.i.*ptrinfo, an ident holding information for the linker. * * --------------- * @@ -628,7 +628,7 @@ * Attributes: * attr.sel Pointer to the entity * - * The constructors new_Sel and new_simpleSel generate the same ir nodes. + * The constructors new_Sel and new_simpleSel generate the same IR nodes. * simpleSel just sets the arity of the index inputs to zero. * * @@ -1140,7 +1140,7 @@ * automatic Phi node construction. * * @param *db A Pointer for debug information. - * @param irg The ir graph the block belongs to. + * @param irg The IR graph the block belongs to. * @param arity The number of control predecessors. * @param in[] An array of control predecessors. The length of * the array must be 'arity'. The constructor copies this array. @@ -1150,16 +1150,16 @@ ir_node *new_rd_Block (dbg_info *db, ir_graph *irg, int arity, ir_node *in[]); /** Constructor for a Start node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. */ ir_node *new_rd_Start (dbg_info *db, ir_graph *irg, ir_node *block); /** Constructor for a End node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. */ ir_node *new_rd_End (dbg_info *db, ir_graph *irg, ir_node *block); @@ -1168,8 +1168,8 @@ ir_node *new_rd_End (dbg_info *db, ir_graph *irg, ir_node *block); * Jmp represents control flow to a single control successor. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. */ ir_node *new_rd_Jmp (dbg_info *db, ir_graph *irg, ir_node *block); @@ -1179,9 +1179,9 @@ ir_node *new_rd_Jmp (dbg_info *db, ir_graph *irg, ir_node *block); * statically known i.e. an indirect Jmp. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. - * @param *tgt The ir node representing the target address. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. + * @param *tgt The IR node representing the target address. */ ir_node *new_rd_IJmp (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *tgt); @@ -1193,7 +1193,7 @@ ir_node *new_rd_IJmp (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *tg * behind Call nodes to represent the control flow to called procedures. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. */ ir_node *new_rd_Break (dbg_info *db, ir_graph *irg, ir_node *block); @@ -1208,8 +1208,8 @@ ir_node *new_rd_Break (dbg_info *db, ir_graph *irg, ir_node *block); * longs. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *c The conditions parameter. Can be of mode b or I_u. */ ir_node *new_rd_Cond (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *c); @@ -1220,8 +1220,8 @@ ir_node *new_rd_Cond (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *c) * can end regular control flow. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The state of memory. * @param arity Number of return values. * @param *in Array of length arity with return values. The constructor copies this array. @@ -1235,8 +1235,8 @@ ir_node *new_rd_Return (dbg_info *db, ir_graph *irg, ir_node *block, * level type information for the constant value. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *mode The mode of the operands and results. * @param *con Points to an entry in the constant table. * @param *tp The type of the constant. @@ -1251,8 +1251,8 @@ ir_node *new_rd_Const_type (dbg_info *db, ir_graph *irg, ir_node *block, * supported: If tv is entity derives a somehow useful type.) * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *mode The mode of the operands and results. * @param *con Points to an entry in the constant table. */ @@ -1287,62 +1287,75 @@ ir_node *new_rd_Const (dbg_info *db, ir_graph *irg, ir_node *block, * it can not cast the argument to an int. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. + * @param mode The mode for the SymConst. * @param symkind The kind of the symbolic constant: type_tag, size, addr_name or addr_ent. * @param value A type, entity or a ident depending on the SymConst kind. * @param tp The source type of the constant. */ -ir_node *new_rd_SymConst_type (dbg_info *db, ir_graph *irg, ir_node *block, union symconst_symbol value, - symconst_kind symkind, ir_type *tp); +ir_node *new_rd_SymConst_type(dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, + union symconst_symbol value, + symconst_kind symkind, ir_type *tp); /** Constructor for a SymConst node. * - * Same as new_rd_SymConst_type, except that it sets the type to type_unknown. */ -ir_node *new_rd_SymConst (dbg_info *db, ir_graph *irg, ir_node *block, - union symconst_symbol value, symconst_kind symkind); + * Same as new_rd_SymConst_type, except that it sets the type to type_unknown. + */ +ir_node *new_rd_SymConst(dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, + union symconst_symbol value, symconst_kind symkind); /** Constructor for a SymConst addr_ent node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for * symconst_addr_ent. * Adds the SymConst to the start block of irg. */ -ir_node *new_rd_SymConst_addr_ent (dbg_info *db, ir_graph *irg, ir_entity *symbol, ir_type *tp); +ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, ir_mode *mode, + ir_entity *symbol, ir_type *tp); /** Constructor for a SymConst ofs_ent node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for * symconst_ofs_ent. - * Adds the SymConst to the start block of irg. */ -ir_node *new_rd_SymConst_ofs_ent (dbg_info *db, ir_graph *irg, ir_entity *symbol, ir_type *tp); + * Adds the SymConst to the start block of irg. + */ +ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, ir_mode *mode, + ir_entity *symbol, ir_type *tp); /** Constructor for a SymConst addr_name node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for * symconst_addr_ent. - * Adds the SymConst to the start block of irg. */ -ir_node *new_rd_SymConst_addr_name (dbg_info *db, ir_graph *irg, ident *symbol, ir_type *tp); + * Adds the SymConst to the start block of irg. + */ +ir_node *new_rd_SymConst_addr_name(dbg_info *db, ir_graph *irg, ir_mode *mode, + ident *symbol, ir_type *tp); /** Constructor for a SymConst type_tag node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for * symconst_addr_ent. - * Adds the SymConst to the start block of irg. */ -ir_node *new_rd_SymConst_type_tag (dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp); + * Adds the SymConst to the start block of irg. + */ +ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg, ir_mode *mode, + ir_type *symbol, ir_type *tp); /** Constructor for a SymConst size node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for * symconst_type_size. * Adds the SymConst to the start block of irg. */ -ir_node *new_rd_SymConst_size (dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp); +ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_mode *mode, + ir_type *symbol, ir_type *tp); /** Constructor for a SymConst size node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for * symconst_type_align. - * Adds the SymConst to the start block of irg. */ -ir_node *new_rd_SymConst_align (dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp); + * Adds the SymConst to the start block of irg. + */ +ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg, ir_mode *mode, + ir_type *symbol, ir_type *tp); /** Constructor for a simpleSel node. * @@ -1351,8 +1364,8 @@ ir_node *new_rd_SymConst_align (dbg_info *db, ir_graph *irg, ir_type *symbol, ir * inputs. It adds the two parameters 0, NULL. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory in which the object the entity should be * selected from is allocated. * @param *objptr The object from that the Sel operation selects a @@ -1371,8 +1384,8 @@ ir_node *new_rd_simpleSel (dbg_info *db, ir_graph *irg, ir_node *block, * node takes the required array indices as inputs. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory in which the object the entity should be selected * from is allocated. * @param *objptr A pointer to a compound entity the Sel operation selects a @@ -1390,8 +1403,8 @@ ir_node *new_rd_Sel (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st * Represents all kinds of method and function calls. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory state. * @param *callee A pointer to the called procedure. * @param arity The number of procedure parameters. @@ -1404,8 +1417,8 @@ ir_node *new_rd_Call (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st /** Constructor for a Add node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1416,8 +1429,8 @@ ir_node *new_rd_Add (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Sub node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1428,8 +1441,8 @@ ir_node *new_rd_Sub (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Minus node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand . * @param *mode The mode of the operand and the result. */ @@ -1439,8 +1452,8 @@ ir_node *new_rd_Minus (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Mul node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1451,8 +1464,8 @@ ir_node *new_rd_Mul (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Mulh node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1463,8 +1476,8 @@ ir_node *new_rd_Mulh (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Quot node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -1477,8 +1490,8 @@ ir_node *new_rd_Quot (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a DivMod node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -1491,8 +1504,8 @@ ir_node *new_rd_DivMod (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Div node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -1505,8 +1518,8 @@ ir_node *new_rd_Div (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Mod node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -1519,8 +1532,8 @@ ir_node *new_rd_Mod (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Abs node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand * @param *mode The mode of the operands and the result. */ @@ -1530,8 +1543,8 @@ ir_node *new_rd_Abs (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a And node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1542,8 +1555,8 @@ ir_node *new_rd_And (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Or node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1554,8 +1567,8 @@ ir_node *new_rd_Or (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Eor node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the results. @@ -1566,8 +1579,8 @@ ir_node *new_rd_Eor (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Not node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *mode The mode of the operand and the result. */ @@ -1577,8 +1590,8 @@ ir_node *new_rd_Not (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Cmp node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. */ @@ -1588,8 +1601,8 @@ ir_node *new_rd_Cmp (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Shl node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to shift the operand . * @param *mode The mode of the operand and the result. @@ -1600,8 +1613,8 @@ ir_node *new_rd_Shl (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Shr node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to shift the operand . * @param *mode The mode of the operand and the result. @@ -1612,8 +1625,8 @@ ir_node *new_rd_Shr (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Shrs node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to shift the operand. * @param *mode The mode of the operand and the result. @@ -1624,8 +1637,8 @@ ir_node *new_rd_Shrs (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Rot node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to rotate the operand. * @param *mode The mode of the operand. @@ -1637,8 +1650,8 @@ ir_node *new_rd_Rot (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Conv node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *mode The mode of this the operand muss be converted . */ @@ -1650,8 +1663,8 @@ ir_node *new_rd_Conv (dbg_info *db, ir_graph *irg, ir_node *block, * High level type cast. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *to_tp The type of this the operand muss be casted . */ @@ -1661,8 +1674,8 @@ ir_node *new_rd_Cast (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Carry node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1673,8 +1686,8 @@ ir_node *new_rd_Carry (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Borrow node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -1685,8 +1698,8 @@ ir_node *new_rd_Borrow (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Phi node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arity The number of predecessors * @param *in[] Array with predecessors. The constructor copies this array. * @param *mode The mode of it's inputs and output. @@ -1697,8 +1710,8 @@ ir_node *new_rd_Phi (dbg_info *db, ir_graph *irg, ir_node *block, int arity, /** Constructor for a Load node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory * @param *adr A pointer to the variable to be read in this memory. * @param *mode The mode of the value to be loaded. @@ -1709,8 +1722,8 @@ ir_node *new_rd_Load (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Store node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory * @param *adr A pointer to the variable to be read in this memory. * @param *val The value to write to this variable. @@ -1723,8 +1736,8 @@ ir_node *new_rd_Store (dbg_info *db, ir_graph *irg, ir_node *block, * The Alloc node extends the memory by space for an entity of type alloc_type. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory which shall contain the new variable. * @param *size The number of bytes to allocate. * @param *alloc_type The type of the allocated variable. @@ -1739,8 +1752,8 @@ ir_node *new_rd_Alloc (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st * arg. Type indicates the type of the entity the argument points to. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory which shall contain the new variable. * @param *ptr The pointer to the object to free. * @param *size The number of objects of type free_type to free in a sequence. @@ -1757,8 +1770,8 @@ ir_node *new_rd_Free (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st * value in all memories where it occurs. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arity The number of memories to synchronize. * @param *in[] An array of pointers to nodes that produce an output of type * memory. The constructor copies this array. @@ -1771,8 +1784,8 @@ ir_node *new_rd_Sync (dbg_info *db, ir_graph *irg, ir_node *block, int arity, * position of the value within the tuple. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arg A node producing a tuple. The node must have mode_T. * @param *mode The mode of the value to project. * @param proj The position of the value in the tuple. @@ -1785,8 +1798,8 @@ ir_node *new_rd_Proj (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *ar * Represents the default control flow of a Switch-Cond node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arg A node producing a tuple. * @param max_proj The end position of the value in the tuple. */ @@ -1799,8 +1812,8 @@ ir_node *new_rd_defaultProj (dbg_info *db, ir_graph *irg, ir_node *block, ir_nod * without changing the corresponding Proj nodes. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arity The number of tuple elements. * @param *in[] An array containing pointers to the nodes producing the tuple * elements. The constructor copies this array. @@ -1814,8 +1827,8 @@ ir_node *new_rd_Tuple (dbg_info *db, ir_graph *irg, ir_node *block, * value. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *val The value * @param *mode The mode of *val. */ @@ -1827,7 +1840,7 @@ ir_node *new_rd_Id (dbg_info *db, ir_graph *irg, ir_node *block, * Returns the unique Bad node of the graph. The same as * get_irg_bad(). * - * @param *irg The ir graph the node belongs to. + * @param *irg The IR graph the node belongs to. */ ir_node *new_rd_Bad (ir_graph *irg); @@ -1838,8 +1851,8 @@ ir_node *new_rd_Bad (ir_graph *irg); * Example: If the value never exceeds '100' this is expressed by placing a * Confirm node val = new_d_Confirm(db, val, 100, '<=') on the dataflow edge. * - * @param *irg The ir graph the node belong to. - * @param *block The ir block the node belong to. + * @param *irg The IR graph the node belong to. + * @param *block The IR block the node belong to. * @param *db A pointer for debug information. * @param *val The value we express a constraint for * @param *bound The value to compare against. Must be a firm node, typically a constant. @@ -1852,7 +1865,7 @@ ir_node *new_rd_Confirm (dbg_info *db, ir_graph *irg, ir_node *block, * * Represents an arbitrary value. Places the node in the start block. * - * @param *irg The ir graph the node belongs to. + * @param *irg The IR graph the node belongs to. * @param *m The mode of the unknown value. */ ir_node *new_rd_Unknown(ir_graph *irg, ir_mode *m); @@ -1865,7 +1878,7 @@ ir_node *new_rd_Unknown(ir_graph *irg, ir_mode *m); * node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *callee The call node visible in the intra procedural view. */ @@ -1876,7 +1889,7 @@ ir_node *new_rd_CallBegin(dbg_info *db, ir_graph *irg, ir_node *block, ir_node * * Used to represent regular procedure end in interprocedual view. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. */ ir_node *new_rd_EndReg (dbg_info *db, ir_graph *irg, ir_node *block); @@ -1886,7 +1899,7 @@ ir_node *new_rd_EndReg (dbg_info *db, ir_graph *irg, ir_node *block); * Used to represent exceptional procedure end in interprocedural view. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. */ ir_node *new_rd_EndExcept(dbg_info *db, ir_graph *irg, ir_node *block); @@ -1903,7 +1916,7 @@ ir_node *new_rd_EndExcept(dbg_info *db, ir_graph *irg, ir_node *block); * The constructor builds the Filter in intraprocedural view. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *arg The tuple value to project from. * @param *mode The mode of the projected value. @@ -1917,14 +1930,14 @@ ir_node *new_rd_Filter (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *ar * Returns the unique NoMem node of the graph. The same as * get_irg_no_mem(). * - * @param *irg The ir graph the node belongs to. + * @param *irg The IR graph the node belongs to. */ ir_node *new_rd_NoMem (ir_graph *irg); /** Constructor for a Mux node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *sel The ir_node that calculates the boolean select. * @param *ir_true The ir_node that calculates the true result. @@ -1937,7 +1950,7 @@ ir_node *new_rd_Mux (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Psi node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *arity The arity of the conditions * @param *conds The array of mode_b conditions, length must be equal arity @@ -1950,7 +1963,7 @@ ir_node *new_rd_Psi (dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a CopyB node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *store The current memory * @param *dst The ir_node that represents the destination address. @@ -1965,8 +1978,8 @@ ir_node *new_rd_CopyB(dbg_info *db, ir_graph *irg, ir_node *block, * A High-Level Type check. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory in which the object the entity should be selected * from is allocated. * @param *objptr A pointer to a object of a class type. @@ -1980,8 +1993,8 @@ ir_node *new_rd_InstOf (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st * A High-Level Exception throw. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory. * @param *obj A pointer to the Except variable. */ @@ -1993,7 +2006,7 @@ ir_node *new_rd_Raise (dbg_info *db, ir_graph *irg, ir_node *block, * A High-Level bounds check. Checks whether lower <= idx && idx < upper. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *store The current memory. * @param *idx The ir_node that represents an index. @@ -2006,7 +2019,7 @@ ir_node *new_rd_Bound(dbg_info *db, ir_graph *irg, ir_node *block, /** Constructor for a Pin node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *node The node which value should be pinned. */ @@ -2015,7 +2028,7 @@ ir_node *new_rd_Pin(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *node); /** Constructor for an ASM pseudo node. * * @param *db A pointer for debug information. - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param arity The number of data inputs to the node. * @param *in The array of length arity of data inputs. @@ -2044,7 +2057,7 @@ ir_node *new_rd_ASM(dbg_info *db, ir_graph *irg, ir_node *block, * automatic Phi node construction. * * - * @param irg The ir graph the block belongs to. + * @param irg The IR graph the block belongs to. * @param arity The number of control predecessors. * @param in[] An array of control predecessors. The length of * the array must be 'arity'. The constructor copies this array. @@ -2053,15 +2066,15 @@ ir_node *new_r_Block (ir_graph *irg, int arity, ir_node *in[]); /** Constructor for a Start node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. */ ir_node *new_r_Start (ir_graph *irg, ir_node *block); /** Constructor for a End node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. */ ir_node *new_r_End (ir_graph *irg, ir_node *block); @@ -2069,8 +2082,8 @@ ir_node *new_r_End (ir_graph *irg, ir_node *block); * * Jmp represents control flow to a single control successor. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. */ ir_node *new_r_Jmp (ir_graph *irg, ir_node *block); @@ -2079,9 +2092,9 @@ ir_node *new_r_Jmp (ir_graph *irg, ir_node *block); * IJmp represents control flow to a single control successor not * statically known i.e. an indirect Jmp. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. - * @param *tgt The ir node representing the target address. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. + * @param *tgt The IR node representing the target address. */ ir_node *new_r_IJmp (ir_graph *irg, ir_node *block, ir_node *tgt); @@ -2094,8 +2107,8 @@ ir_node *new_r_IJmp (ir_graph *irg, ir_node *block, ir_node *tgt); * This is not consistent: Input to Cond is Is, Proj has as proj number * longs. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *c The conditions parameter.Can be of mode b or I_u. */ ir_node *new_r_Cond (ir_graph *irg, ir_node *block, ir_node *c); @@ -2105,8 +2118,8 @@ ir_node *new_r_Cond (ir_graph *irg, ir_node *block, ir_node *c); * Returns the memory an zero or more return values. Only node that * can end regular control flow. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The state of memory. * @param arity Number of array indices. * @param *in[] Array with index inputs to the node. The constructor copies this array. @@ -2120,8 +2133,8 @@ ir_node *new_r_Return (ir_graph *irg, ir_node *block, * value. Sets the type information to type_unknown. (No more * supported: If tv is entity derives a somehow useful type.) * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *mode The mode of the operands and the results. * @param *con Points to an entry in the constant table. */ @@ -2134,8 +2147,8 @@ ir_node *new_r_Const (ir_graph *irg, ir_node *block, * value. Sets the type information to type_unknown. (No more * supported: If tv is entity derives a somehow useful type.) * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *mode The mode of the operands and the results. * @param value A value from which the tarval is made. */ @@ -2147,8 +2160,8 @@ ir_node *new_r_Const_long(ir_graph *irg, ir_node *block, * The constant represents a target value. This constructor sets high * level type information for the constant value. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *mode The mode of the operands and results. * @param *con Points to an entry in the constant table. * @param *tp The type of the constant. @@ -2177,13 +2190,14 @@ ir_node *new_r_Const_type(ir_graph *irg, ir_node *block, * Outputs of the node. * An unsigned integer (I_u) or a pointer (P). * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. + * @param mode The mode for the SymConst. * @param value A type, entity or a ident depending on the SymConst kind. * @param symkind The kind of the symbolic constant: type_tag, size or link_info. */ -ir_node *new_r_SymConst (ir_graph *irg, ir_node *block, - union symconst_symbol value, symconst_kind symkind); +ir_node *new_r_SymConst(ir_graph *irg, ir_node *block, ir_mode *mode, + union symconst_symbol value, symconst_kind symkind); /** Constructor for a simpleSel node. * @@ -2191,8 +2205,8 @@ ir_node *new_r_SymConst (ir_graph *irg, ir_node *block, * Sel nodes that do not select from an array, i.e., have no index * inputs. It adds the two parameters 0, NULL. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory in which the object the entity should be selected * from is allocated. * @param *objptr The object from that the Sel operation selects a @@ -2210,8 +2224,8 @@ ir_node *new_r_simpleSel(ir_graph *irg, ir_node *block, ir_node *store, * entity. If the selected entity is an array element entity the Sel * node takes the required array indices as inputs. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory in which the object the entity should be selected * from is allocated. * @param *objptr A pointer to a compound entity the Sel operation selects a @@ -2229,8 +2243,8 @@ ir_node *new_r_Sel (ir_graph *irg, ir_node *block, ir_node *store, * * Represents all kinds of method and function calls. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The actual store. * @param *callee A pointer to the called procedure. * @param arity The number of procedure parameters. @@ -2243,8 +2257,8 @@ ir_node *new_r_Call (ir_graph *irg, ir_node *block, ir_node *store, /** Constructor for a Add node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -2255,8 +2269,8 @@ ir_node *new_r_Add (ir_graph *irg, ir_node *block, /** * Constructor for a Sub node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the results. @@ -2266,8 +2280,8 @@ ir_node *new_r_Sub (ir_graph *irg, ir_node *block, /** Constructor for a Minus node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *mode The mode of the operand and the result. */ @@ -2276,8 +2290,8 @@ ir_node *new_r_Minus (ir_graph *irg, ir_node *block, /** Constructor for a Mul node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -2287,8 +2301,8 @@ ir_node *new_r_Mul (ir_graph *irg, ir_node *block, /** Constructor for a Mulh node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -2298,8 +2312,8 @@ ir_node *new_r_Mulh (ir_graph *irg, ir_node *block, /** Constructor for a Quot node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -2311,8 +2325,8 @@ ir_node *new_r_Quot (ir_graph *irg, ir_node *block, /** Constructor for a DivMod node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -2324,8 +2338,8 @@ ir_node *new_r_DivMod (ir_graph *irg, ir_node *block, /** Constructor for a Div node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -2337,8 +2351,8 @@ ir_node *new_r_Div (ir_graph *irg, ir_node *block, /** Constructor for a Mod node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *memop The store needed to model exceptions * @param *op1 The first operand. * @param *op2 The second operand. @@ -2350,8 +2364,8 @@ ir_node *new_r_Mod (ir_graph *irg, ir_node *block, /** Constructor for a Abs node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand * @param *mode The mode of the operands and the result. */ @@ -2360,8 +2374,8 @@ ir_node *new_r_Abs (ir_graph *irg, ir_node *block, /** Constructor for a And node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -2371,8 +2385,8 @@ ir_node *new_r_And (ir_graph *irg, ir_node *block, /** Constructor for a Or node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -2382,8 +2396,8 @@ ir_node *new_r_Or (ir_graph *irg, ir_node *block, /** Constructor for a Eor node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the results. @@ -2393,8 +2407,8 @@ ir_node *new_r_Eor (ir_graph *irg, ir_node *block, /** Constructor for a Not node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *mode The mode of the operand and the result. */ @@ -2403,8 +2417,8 @@ ir_node *new_r_Not (ir_graph *irg, ir_node *block, /** Constructor for a Cmp node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. */ @@ -2413,8 +2427,8 @@ ir_node *new_r_Cmp (ir_graph *irg, ir_node *block, /** Constructor for a Shl node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to shift the operand . * @param *mode The mode of the operand and the result. @@ -2424,8 +2438,8 @@ ir_node *new_r_Shl (ir_graph *irg, ir_node *block, /** Constructor for a Shr node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to shift the operand . * @param *mode The mode of the operand and the result. @@ -2436,8 +2450,8 @@ ir_node *new_r_Shr (ir_graph *irg, ir_node *block, /** * Constructor for a Shrs node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to shift the operand. * @param *mode The mode of the operand and the result. @@ -2447,8 +2461,8 @@ ir_node *new_r_Shrs (ir_graph *irg, ir_node *block, /** Constructor for a Rot node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *k The number of bits to rotate the operand. * @param *mode The mode of the operand. @@ -2458,8 +2472,8 @@ ir_node *new_r_Rot (ir_graph *irg, ir_node *block, /** Constructor for a Conv node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *mode The mode of this the operand muss be converted . */ @@ -2470,8 +2484,8 @@ ir_node *new_r_Conv (ir_graph *irg, ir_node *block, * * High level type cast * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op The operand. * @param *to_tp The type of this the operand muss be casted . */ @@ -2480,8 +2494,8 @@ ir_node *new_r_Cast (ir_graph *irg, ir_node *block, /** Constructor for a Carry node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the result. @@ -2492,8 +2506,8 @@ ir_node *new_r_Carry (ir_graph *irg, ir_node *block, /** * Constructor for a Borrow node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *op1 The first operand. * @param *op2 The second operand. * @param *mode The mode of the operands and the results. @@ -2503,8 +2517,8 @@ ir_node *new_r_Borrow (ir_graph *irg, ir_node *block, /** Constructor for a Phi node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arity The number of predecessors * @param *in[] Array with predecessors. The constructor copies this array. * @param *mode The mode of it's inputs and output. @@ -2514,8 +2528,8 @@ ir_node *new_r_Phi (ir_graph *irg, ir_node *block, int arity, /** Constructor for a Load node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory * @param *adr A pointer to the variable to be read in this memory. * @param *mode The mode of the value to be loaded. @@ -2525,8 +2539,8 @@ ir_node *new_r_Load (ir_graph *irg, ir_node *block, /** Constructor for a Store node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory * @param *adr A pointer to the variable to be read in this memory. * @param *val The value to write to this variable. @@ -2538,8 +2552,8 @@ ir_node *new_r_Store (ir_graph *irg, ir_node *block, * * The Alloc node extends the memory by space for an entity of type alloc_type. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory which shall contain the new variable. * @param *size The number of bytes to allocate. * @param *alloc_type The type of the allocated variable. @@ -2553,8 +2567,8 @@ ir_node *new_r_Alloc (ir_graph *irg, ir_node *block, ir_node *store, * Frees the memory occupied by the entity pointed to by the pointer * arg. Type indicates the type of the entity the argument points to. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory which shall contain the new variable. * @param *ptr The pointer to the object to free. * @param *size The number of objects of type free_type to free in a sequence. @@ -2570,8 +2584,8 @@ ir_node *new_r_Free (ir_graph *irg, ir_node *block, ir_node *store, * either occurs only in one of the memories, or it contains the same * value in all memories where it occurs. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arity The number of memories to synchronize. * @param *in[] An array of pointers to nodes that produce an output of type memory. * The constructor copies this array. @@ -2583,8 +2597,8 @@ ir_node *new_r_Sync (ir_graph *irg, ir_node *block, int arity, ir_node *in[]); * Projects a single value out of a tuple. The parameter proj gives the * position of the value within the tuple. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arg A node producing a tuple. * @param *mode The mode of the value to project. * @param proj The position of the value in the tuple. @@ -2596,8 +2610,8 @@ ir_node *new_r_Proj (ir_graph *irg, ir_node *block, ir_node *arg, * * Represents the default control flow of a Switch-Cond node. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arg A node producing a tuple. * @param max_proj The end position of the value in the tuple. */ @@ -2609,8 +2623,8 @@ ir_node *new_r_defaultProj (ir_graph *irg, ir_node *block, ir_node *arg, long ma * This is an auxiliary node to replace a node that returns a tuple * without changing the corresponding Proj nodes. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param arity The number of tuple elements. * @param *in[] An array containing pointers to the nodes producing the tuple elements. * The constructor copies this array. @@ -2622,8 +2636,8 @@ ir_node *new_r_Tuple (ir_graph *irg, ir_node *block, int arity, ir_node *in[]); * This is an auxiliary node to replace a node that returns a single * value. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *val The operand to Id. * @param *mode The mode of *val. */ @@ -2635,7 +2649,7 @@ ir_node *new_r_Id (ir_graph *irg, ir_node *block, * Returns the unique Bad node of the graph. The same as * get_irg_bad(). * - * @param *irg The ir graph the node belongs to. + * @param *irg The IR graph the node belongs to. * */ ir_node *new_r_Bad (ir_graph *irg); @@ -2647,8 +2661,8 @@ ir_node *new_r_Bad (ir_graph *irg); * Example: If the value never exceeds '100' this is expressed by placing a * Confirm node val = new_d_Confirm(db, val, 100, '<=') on the dataflow edge. * - * @param *irg The ir graph the node belong to. - * @param *block The ir block the node belong to. + * @param *irg The IR graph the node belong to. + * @param *block The IR block the node belong to. * @param *val The value we express a constraint for * @param *bound The value to compare against. Must be a firm node, typically a constant. * @param cmp The compare operation. @@ -2661,7 +2675,7 @@ ir_node *new_r_Confirm(ir_graph *irg, ir_node *block, * Represents an arbitrary value. Places the node in * the start block. * - * @param *irg The ir graph the node belongs to. + * @param *irg The IR graph the node belongs to. * @param *m The mode of the unknown value. */ ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m); @@ -2673,7 +2687,7 @@ ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m); * constructor copies the method pointer input from the passed Call * node. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *callee The call node visible in the intra procedural view. */ @@ -2683,7 +2697,7 @@ ir_node *new_r_CallBegin(ir_graph *irg, ir_node *block, ir_node *callee); * * Used to represent regular procedure end in interprocedual view. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. */ ir_node *new_r_EndReg (ir_graph *irg, ir_node *block); @@ -2692,7 +2706,7 @@ ir_node *new_r_EndReg (ir_graph *irg, ir_node *block); * * Used to represent exceptional procedure end in interprocedural view. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. */ ir_node *new_r_EndExcept(ir_graph *irg, ir_node *block); @@ -2704,7 +2718,7 @@ ir_node *new_r_EndExcept(ir_graph *irg, ir_node *block); * It is used for the interprocedural representation where blocks are parted * behind Call nodes to represent the control flow to called procedures. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. */ ir_node *new_r_Break (ir_graph *irg, ir_node *block); @@ -2720,7 +2734,7 @@ ir_node *new_r_Break (ir_graph *irg, ir_node *block); * * The constructor builds the Filter in intraprocedural view. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *arg The tuple value to project from. * @param *mode The mode of the projected value. @@ -2734,13 +2748,13 @@ ir_node *new_r_Filter (ir_graph *irg, ir_node *block, ir_node *arg, * Returns the unique NoMem node of the graph. The same as * get_irg_no_mem(). * - * @param *irg The ir graph the node belongs to. + * @param *irg The IR graph the node belongs to. */ ir_node *new_r_NoMem (ir_graph *irg); /** Constructor for a Mux node. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *sel The ir_node that calculates the boolean select. * @param *ir_true The ir_node that calculates the true result. @@ -2752,7 +2766,7 @@ ir_node *new_r_Mux (ir_graph *irg, ir_node *block, /** Constructor for a Psi node. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *arity The arity of the conditions * @param *conds The array of mode_b conditions, length must be equal arity @@ -2764,7 +2778,7 @@ ir_node *new_r_Psi (ir_graph *irg, ir_node *block, /** Constructor for a CopyB node. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *store The current memory * @param *dst The ir_node that represents the destination address. @@ -2778,8 +2792,8 @@ ir_node *new_r_CopyB(ir_graph *irg, ir_node *block, * * A High-Level Type check. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The memory in which the object the entity should be selected * from is allocated. * @param *objptr A pointer to a object of a class type. @@ -2792,8 +2806,8 @@ ir_node *new_r_InstOf(ir_graph *irg, ir_node *block, ir_node *store, * * A High-Level Exception throw. * - * @param *irg The ir graph the node belongs to. - * @param *block The ir block the node belongs to. + * @param *irg The IR graph the node belongs to. + * @param *block The IR block the node belongs to. * @param *store The current memory. * @param *obj A pointer to the Except variable. */ @@ -2804,7 +2818,7 @@ ir_node *new_r_Raise(ir_graph *irg, ir_node *block, * * A High-Level bounds check. Checks whether lower <= idx && idx < upper. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *store The current memory. * @param *idx The ir_node that represents an index. @@ -2816,7 +2830,7 @@ ir_node *new_r_Bound(ir_graph *irg, ir_node *block, /** Constructor for a Pin node. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param *node The node which value should be pinned. */ @@ -2824,7 +2838,7 @@ ir_node *new_r_Pin(ir_graph *irg, ir_node *block, ir_node *node); /** Constructor for an ASM pseudo node. * - * @param *irg The ir graph the node belong to. + * @param *irg The IR graph the node belong to. * @param *block The block the node belong to. * @param arity The number of data inputs to the node. * @param *in The array of length arity of data inputs. @@ -2905,7 +2919,7 @@ ir_node *new_d_Jmp (dbg_info *db); * statically known i.e. an indirect Jmp. * * @param *db A pointer for debug information. - * @param *tgt The ir node representing the target address. + * @param *tgt The IR node representing the target address. */ ir_node *new_d_IJmp (dbg_info *db, ir_node *tgt); @@ -2992,17 +3006,21 @@ ir_node *new_d_Const (dbg_info *db, ir_mode *mode, tarval *con); * An unsigned integer (I_u) or a pointer (P). * * @param *db A pointer for debug information. + * @param mode The mode for the SymConst. * @param value A type, entity or ident depending on the SymConst kind. * @param kind The kind of the symbolic constant: symconst_type_tag, symconst_type_size, * symconst_type_align, symconst_addr_name or symconst_addr_ent. * @param tp The source type of the constant. */ -ir_node *new_d_SymConst_type (dbg_info *db, union symconst_symbol value, symconst_kind kind, ir_type *tp); +ir_node *new_d_SymConst_type(dbg_info *db, ir_mode *mode, + union symconst_symbol value, symconst_kind kind, ir_type *tp); /** Constructor for a SymConst node. * - * Same as new_d_SymConst_type, except that it sets the type to type_unknown. */ -ir_node *new_d_SymConst (dbg_info *db, union symconst_symbol value, symconst_kind kind); + * Same as new_d_SymConst_type, except that it sets the type to type_unknown. + */ +ir_node *new_d_SymConst(dbg_info *db, ir_mode *mode, + union symconst_symbol value, symconst_kind kind); /** Constructor for a simpleSel node. * @@ -3696,7 +3714,7 @@ ir_node *new_Jmp (void); * IJmp represents control flow to a single control successor not * statically known i.e. an indirect Jmp. * - * @param *tgt The ir node representing the target address. + * @param *tgt The IR node representing the target address. */ ir_node *new_IJmp (ir_node *tgt); @@ -3790,12 +3808,13 @@ ir_node *new_Const_type(tarval *con, ir_type *tp); * Outputs of the node. * An unsigned integer (I_u) or a pointer (P). * + * @param mode The mode for the SymConst. * @param value A type or a ident depending on the SymConst kind. * @param kind The kind of the symbolic constant: symconst_type_tag, symconst_type_size * symconst_type_align, symconst_addr_name or symconst_addr_ent. * @param tp The source type of the constant. */ -ir_node *new_SymConst_type (union symconst_symbol value, symconst_kind kind, ir_type *tp); +ir_node *new_SymConst_type(ir_mode *mode, union symconst_symbol value, symconst_kind kind, ir_type *tp); /** Constructor for a SymConst node. * @@ -3822,11 +3841,12 @@ ir_node *new_SymConst_type (union symconst_symbol value, symconst_kind kind, ir_ * Outputs of the node. * An unsigned integer (I_u) or a pointer (P). * + * @param mode The mode for the SymConst. * @param value A type or a ident depending on the SymConst kind. * @param kind The kind of the symbolic constant: symconst_type_tag, symconst_type_size * symconst_type_align, symconst_addr_name or symconst_addr_ent. */ -ir_node *new_SymConst (union symconst_symbol value, symconst_kind kind); +ir_node *new_SymConst(ir_mode *mode, union symconst_symbol value, symconst_kind kind); /** Constructor for a simpelSel node. * @@ -3873,7 +3893,7 @@ ir_node *new_Sel (ir_node *store, ir_node *objptr, int arity, ir_node *in[], * @param *tp Type information of the procedure called. */ ir_node *new_Call (ir_node *store, ir_node *callee, int arity, ir_node *in[], - ir_type *tp); + ir_type *tp); /** Constructor for a CallBegin node. * @@ -4479,7 +4499,7 @@ void keep_alive(ir_node *ka); ir_type *get_cur_frame_type(void); -/* --- initialize and finalize ir construction --- */ +/* --- initialize and finalize IR construction --- */ /** Puts the graph into state "phase_high" */ #define irg_finalize_cons(irg) set_irg_phase_state(irg, phase_high) diff --git a/ir/be/ppc32/ppc32_transform_conv.c b/ir/be/ppc32/ppc32_transform_conv.c index 205732bac..af5bc72ce 100644 --- a/ir/be/ppc32/ppc32_transform_conv.c +++ b/ir/be/ppc32/ppc32_transform_conv.c @@ -87,7 +87,7 @@ static ir_node *own_gen_convert_call(ppc32_transform_env_t *env, ir_node *op, co set_method_res_type(method_type, 0, new_type_primitive(new_id_from_str("conv_result"), to_mode)); method_ent = new_entity(get_glob_type(), new_id_from_str(funcname), method_type); - callee = new_rd_SymConst_addr_ent(env->dbg, env->irg, method_ent, method_type); + callee = new_rd_SymConst_addr_ent(env->dbg, env->irg, mode_P_code, method_ent, method_type); call = new_rd_Call(env->dbg, env->irg, env->block, memory, callee, 1, in, method_type); call_results = new_rd_Proj(env->dbg, env->irg, env->block, call, mode_T, pn_Call_T_result); memory = new_rd_Proj(env->dbg, env->irg, env->block, call, mode_M, pn_Call_M_regular); diff --git a/ir/ir/ircons.c b/ir/ir/ircons.c index 7d0e81781..30724fe92 100644 --- a/ir/ir/ircons.c +++ b/ir/ir/ircons.c @@ -592,18 +592,10 @@ new_bd_Sel(dbg_info *db, ir_node *block, ir_node *store, ir_node *objptr, } /* new_bd_Sel */ static ir_node * -new_bd_SymConst_type(dbg_info *db, ir_node *block, symconst_symbol value, - symconst_kind symkind, ir_type *tp) { - ir_node *res; - ir_mode *mode; +new_bd_SymConst_type(dbg_info *db, ir_node *block, ir_mode *mode, + symconst_symbol value,symconst_kind symkind, ir_type *tp) { ir_graph *irg = current_ir_graph; - - if ((symkind == symconst_addr_name) || (symkind == symconst_addr_ent)) - mode = mode_P_data; /* FIXME: can be mode_P_code */ - else - mode = mode_Iu; - - res = new_ir_node(db, irg, block, op_SymConst, mode, 0, NULL); + ir_node *res = new_ir_node(db, irg, block, op_SymConst, mode, 0, NULL); res->attr.symc.num = symkind; res->attr.symc.sym = value; @@ -1196,59 +1188,58 @@ new_rd_Sel(dbg_info *db, ir_graph *irg, ir_node *block, ir_node *store, ir_node } /* new_rd_Sel */ ir_node * -new_rd_SymConst_type(dbg_info *db, ir_graph *irg, ir_node *block, symconst_symbol value, - symconst_kind symkind, ir_type *tp) { +new_rd_SymConst_type(dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, + symconst_symbol value, symconst_kind symkind, ir_type *tp) { ir_node *res; ir_graph *rem = current_ir_graph; current_ir_graph = irg; - res = new_bd_SymConst_type(db, block, value, symkind, tp); + res = new_bd_SymConst_type(db, block, mode, value, symkind, tp); current_ir_graph = rem; return res; } /* new_rd_SymConst_type */ ir_node * -new_rd_SymConst(dbg_info *db, ir_graph *irg, ir_node *block, symconst_symbol value, - symconst_kind symkind) { - ir_node *res = new_rd_SymConst_type(db, irg, block, value, symkind, firm_unknown_type); - return res; +new_rd_SymConst(dbg_info *db, ir_graph *irg, ir_node *block, ir_mode *mode, + symconst_symbol value, symconst_kind symkind) { + return new_rd_SymConst_type(db, irg, block, mode, value, symkind, firm_unknown_type); } /* new_rd_SymConst */ - ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, ir_entity *symbol, ir_type *tp) { + ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_entity *symbol, ir_type *tp) { symconst_symbol sym; sym.entity_p = symbol; - return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_addr_ent, tp); + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), mode, sym, symconst_addr_ent, tp); } /* new_rd_SymConst_addr_ent */ -ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, ir_entity *symbol, ir_type *tp) { +ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_entity *symbol, ir_type *tp) { symconst_symbol sym; sym.entity_p = symbol; - return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_ofs_ent, tp); + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), mode, sym, symconst_ofs_ent, tp); } /* new_rd_SymConst_ofs_ent */ -ir_node *new_rd_SymConst_addr_name(dbg_info *db, ir_graph *irg, ident *symbol, ir_type *tp) { +ir_node *new_rd_SymConst_addr_name(dbg_info *db, ir_graph *irg, ir_mode *mode, ident *symbol, ir_type *tp) { symconst_symbol sym; sym.ident_p = symbol; - return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_addr_name, tp); + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), mode, sym, symconst_addr_name, tp); } /* new_rd_SymConst_addr_name */ -ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) { +ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_type *symbol, ir_type *tp) { symconst_symbol sym; sym.type_p = symbol; - return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_tag, tp); + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), mode, sym, symconst_type_tag, tp); } /* new_rd_SymConst_type_tag */ -ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) { +ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_type *symbol, ir_type *tp) { symconst_symbol sym; sym.type_p = symbol; - return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_size, tp); + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), mode, sym, symconst_type_size, tp); } /* new_rd_SymConst_size */ -ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) { +ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg, ir_mode *mode, ir_type *symbol, ir_type *tp) { symconst_symbol sym; sym.type_p = symbol; - return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_align, tp); + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), mode, sym, symconst_type_align, tp); } /* new_rd_SymConst_align */ ir_node * @@ -1493,9 +1484,9 @@ ir_node *new_r_Const_type(ir_graph *irg, ir_node *block, ir_mode *mode, tarval *con, ir_type *tp) { return new_rd_Const_type(NULL, irg, block, mode, con, tp); } -ir_node *new_r_SymConst(ir_graph *irg, ir_node *block, +ir_node *new_r_SymConst(ir_graph *irg, ir_node *block, ir_mode *mode, symconst_symbol value, symconst_kind symkind) { - return new_rd_SymConst(NULL, irg, block, value, symkind); + return new_rd_SymConst(NULL, irg, block, mode, value, symkind); } ir_node *new_r_simpleSel(ir_graph *irg, ir_node *block, ir_node *store, ir_node *objptr, ir_entity *ent) { @@ -2521,14 +2512,14 @@ new_d_Sel(dbg_info *db, ir_node *store, ir_node *objptr, int n_index, ir_node ** } /* new_d_Sel */ ir_node * -new_d_SymConst_type(dbg_info *db, symconst_symbol value, symconst_kind kind, ir_type *tp) { - return new_bd_SymConst_type(db, get_irg_start_block(current_ir_graph), +new_d_SymConst_type(dbg_info *db, ir_mode *mode, symconst_symbol value, symconst_kind kind, ir_type *tp) { + return new_bd_SymConst_type(db, get_irg_start_block(current_ir_graph), mode, value, kind, tp); } /* new_d_SymConst_type */ ir_node * -new_d_SymConst(dbg_info *db, symconst_symbol value, symconst_kind kind) { - return new_bd_SymConst_type(db, get_irg_start_block(current_ir_graph), +new_d_SymConst(dbg_info *db, ir_mode *mode, symconst_symbol value, symconst_kind kind) { + return new_bd_SymConst_type(db, get_irg_start_block(current_ir_graph), mode, value, kind, firm_unknown_type); } /* new_d_SymConst */ @@ -2895,11 +2886,11 @@ ir_node *new_Const_type(tarval *con, ir_type *tp) { return new_d_Const_type(NULL, get_type_mode(tp), con, tp); } -ir_node *new_SymConst_type(symconst_symbol value, symconst_kind kind, ir_type *type) { - return new_d_SymConst_type(NULL, value, kind, type); +ir_node *new_SymConst_type(ir_mode *mode, symconst_symbol value, symconst_kind kind, ir_type *type) { + return new_d_SymConst_type(NULL, mode, value, kind, type); } -ir_node *new_SymConst(symconst_symbol value, symconst_kind kind) { - return new_d_SymConst(NULL, value, kind); +ir_node *new_SymConst(ir_mode *mode, symconst_symbol value, symconst_kind kind) { + return new_d_SymConst(NULL, mode, value, kind); } ir_node *new_simpleSel(ir_node *store, ir_node *objptr, ir_entity *ent) { return new_d_simpleSel(NULL, store, objptr, ent); diff --git a/ir/ir/iropt.c b/ir/ir/iropt.c index cdab35eb3..a4c0fcc19 100644 --- a/ir/ir/iropt.c +++ b/ir/ir/iropt.c @@ -3358,8 +3358,8 @@ static ir_node *transform_node_Cast(ir_node *n) { get_Const_tarval(pred), tp); DBG_OPT_CSTEVAL(oldn, n); } else if (is_SymConst(pred) && get_SymConst_value_type(pred) != tp) { - n = new_rd_SymConst_type(NULL, current_ir_graph, get_irn_n(pred, -1), get_SymConst_symbol(pred), - get_SymConst_kind(pred), tp); + n = new_rd_SymConst_type(NULL, current_ir_graph, get_irn_n(pred, -1), get_irn_mode(pred), + get_SymConst_symbol(pred), get_SymConst_kind(pred), tp); DBG_OPT_CSTEVAL(oldn, n); } diff --git a/ir/ir/irprofile.c b/ir/ir/irprofile.c index 8cc237917..fbcf08fa0 100644 --- a/ir/ir/irprofile.c +++ b/ir/ir/irprofile.c @@ -220,14 +220,14 @@ gen_initializer_irg(ir_entity * ent_filename, ir_entity * bblock_id, ir_entity * start_block = get_irg_start_block(irg); sym.entity_p = init_ent; - symconst = new_r_SymConst(irg, start_block, sym, symconst_addr_ent); + symconst = new_r_SymConst(irg, start_block, mode_P_data, sym, symconst_addr_ent); sym.entity_p = ent_filename; - ins[0] = new_r_SymConst(irg, start_block, sym, symconst_addr_ent); + ins[0] = new_r_SymConst(irg, start_block, mode_P_data, sym, symconst_addr_ent); sym.entity_p = bblock_id; - ins[1] = new_r_SymConst(irg, start_block, sym, symconst_addr_ent); + ins[1] = new_r_SymConst(irg, start_block, mode_P_data, sym, symconst_addr_ent); sym.entity_p = bblock_counts; - ins[2] = new_r_SymConst(irg, start_block, sym, symconst_addr_ent); + ins[2] = new_r_SymConst(irg, start_block, mode_P_data, sym, symconst_addr_ent); ins[3] = new_r_Const_long(irg, start_block, mode_Iu, n_blocks); call = new_r_Call(irg, bb, get_irg_initial_mem(irg), symconst, 4, ins, init_type); @@ -449,7 +449,7 @@ ir_profile_instrument(const char *filename, unsigned flags) /* generate a symbolic constant pointing to the count array */ sym.entity_p = bblock_counts; - wd.symconst = new_r_SymConst(irg, get_irg_start_block(irg), sym, symconst_addr_ent); + wd.symconst = new_r_SymConst(irg, get_irg_start_block(irg), mode_P_data, sym, symconst_addr_ent); irg_block_walk_graph(irg, block_id_walker, NULL, &wd); start_block = get_irg_start_block(irg); @@ -509,7 +509,7 @@ ir_profile_instrument(const char *filename, unsigned flags) set_compound_graph_path_node(path, 1, loc_name); if (wd.locs[i].fname) { sym.entity_p = wd.locs[i].fname; - n = new_SymConst(sym, symconst_addr_ent); + n = new_SymConst(mode_P_data, sym, symconst_addr_ent); } else { n = new_Const(mode_P_data, get_mode_null(mode_P_data)); } diff --git a/ir/lower/lower_dw.c b/ir/lower/lower_dw.c index bffde5ed7..3c9cc438b 100644 --- a/ir/lower/lower_dw.c +++ b/ir/lower/lower_dw.c @@ -525,7 +525,7 @@ static ir_node *get_intrinsic_address(ir_type *method, ir_op *op, ent = entry->ent; } /* if */ sym.entity_p = ent; - return new_r_SymConst(current_ir_graph, block, sym, symconst_addr_ent); + return new_r_SymConst(current_ir_graph, block, mode_P_code, sym, symconst_addr_ent); } /* get_intrinsic_address */ /** diff --git a/ir/lower/lower_hl.c b/ir/lower/lower_hl.c index 7441cb409..90c1e6779 100644 --- a/ir/lower/lower_hl.c +++ b/ir/lower/lower_hl.c @@ -79,7 +79,7 @@ static void lower_sel(ir_node *sel) { sym.entity_p = ent; bl = get_nodes_block(sel); - cnst = new_rd_SymConst(dbg, irg, bl, sym, symconst_addr_ent); + cnst = new_rd_SymConst(dbg, irg, bl, mode, sym, symconst_addr_ent); newn = new_rd_Add(dbg, irg, bl, ptr, cnst, mode); } else { /* not TLS */ @@ -195,9 +195,9 @@ static void lower_sel(ir_node *sel) { mode); } } else if (is_Method_type(get_entity_type(ent)) && - is_Class_type(owner) && - (owner != get_glob_type()) && - (!is_frame_type(owner))) { + is_Class_type(owner) && + (owner != get_glob_type()) && + (!is_frame_type(owner))) { ir_node *add; ir_mode *ent_mode = get_type_mode(get_entity_type(ent)); @@ -223,7 +223,7 @@ static void lower_sel(ir_node *sel) { newn = new_rd_Add(dbg, irg, bl, get_Sel_ptr(sel), cnst, mode); } else { /* global_type */ - newn = new_rd_SymConst_addr_ent(NULL, current_ir_graph, ent, firm_unknown_type); + newn = new_rd_SymConst_addr_ent(NULL, current_ir_graph, mode, ent, firm_unknown_type); } } /* run the hooks */ diff --git a/ir/lower/lower_intrinsics.c b/ir/lower/lower_intrinsics.c index 3c23237c3..2f6bc155d 100644 --- a/ir/lower/lower_intrinsics.c +++ b/ir/lower/lower_intrinsics.c @@ -924,7 +924,7 @@ int i_mapper_RuntimeCall(ir_node *node, runtime_rt *rt) { /* step 1: create the call */ sym.entity_p = rt->ent; - addr = new_r_SymConst(irg, bl, sym, symconst_addr_ent); + addr = new_r_SymConst(irg, bl, mode_P_code, sym, symconst_addr_ent); call = new_rd_Call(get_irn_dbg_info(node), irg, bl, mem, addr, n_param, in, mtp); set_irn_pinned(call, get_irn_pinned(node)); diff --git a/ir/opt/proc_cloning.c b/ir/opt/proc_cloning.c index 7fc28389e..591278428 100644 --- a/ir/opt/proc_cloning.c +++ b/ir/opt/proc_cloning.c @@ -438,7 +438,7 @@ static ir_entity *clone_method(quadruple_t *q) { sym.entity_p = new_entity; rem = current_ir_graph; current_ir_graph = get_const_code_irg(); - new_entity->value = new_SymConst(sym, symconst_addr_ent); + new_entity->value = new_SymConst(mode_P_code, sym, symconst_addr_ent); current_ir_graph = rem; /* The "new_entity" don't have this information. */ @@ -465,7 +465,7 @@ static ir_node *new_cl_Call(ir_node *call, ir_entity *new_entity, int pos) { ir_node *bl = get_nodes_block(call); sym.entity_p = new_entity; - callee = new_r_SymConst(irg, bl, sym, symconst_addr_ent); + callee = new_r_SymConst(irg, bl, mode_P_code, sym, symconst_addr_ent); mtp = get_entity_type(new_entity); n_params = get_Call_n_params(call); diff --git a/ir/tr/entity.c b/ir/tr/entity.c index b2f51d073..b317ba60a 100644 --- a/ir/tr/entity.c +++ b/ir/tr/entity.c @@ -157,10 +157,11 @@ new_rd_entity(dbg_info *db, ir_type *owner, ident *name, ir_type *type) if (is_Method_type(type)) { symconst_symbol sym; + ir_mode *mode = is_Method_type(type) ? mode_P_code : mode_P_data; sym.entity_p = res; rem = current_ir_graph; current_ir_graph = get_const_code_irg(); - res->value = new_SymConst(sym, symconst_addr_ent); + res->value = new_SymConst(mode, sym, symconst_addr_ent); current_ir_graph = rem; res->allocation = allocation_static; res->variability = variability_constant; @@ -651,7 +652,7 @@ ir_node *copy_const_value(dbg_info *dbg, ir_node *n) { nn = new_d_Const_type(dbg, m, get_Const_tarval(n), get_Const_type(n)); break; case iro_SymConst: - nn = new_d_SymConst_type(dbg, get_SymConst_symbol(n), get_SymConst_kind(n), + nn = new_d_SymConst_type(dbg, get_irn_mode(n), get_SymConst_symbol(n), get_SymConst_kind(n), get_SymConst_value_type(n)); break; case iro_Add: @@ -1369,5 +1370,6 @@ void firm_init_entity(void) current_ir_graph = get_const_code_irg(); sym.entity_p = unknown_entity; - unknown_entity->value = new_SymConst(sym, symconst_addr_ent); + /* TODO: we need two unknown_entities here, one for code and one for data */ + unknown_entity->value = new_SymConst(mode_P_data, sym, symconst_addr_ent); } /* firm_init_entity */ -- 2.20.1