Added is_Const
[libfirm] / ir / ir / ircons.h
index d0fe2fe..1dd7151 100644 (file)
  *    ir_node *new_Alloc  (ir_node *store, ir_node *size, type *alloc_type,
  *                         where_alloc where);
  *    ir_node *new_Free   (ir_node *store, ir_node *ptr, ir_node *size,
- *               type *free_type);
+ *               type *free_type, where_alloc where);
  *    ir_node *new_Proj   (ir_node *arg, ir_mode *mode, long proj);
  *    ir_node *new_NoMem  (void);
+ *    ir_node *new_Mux    (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
  *
  *    void add_immBlock_pred (ir_node *block, ir_node *jmp);
  *    void mature_immBlock (ir_node *block);
  *    The block can be completed by mature_immBlock(block) if all predecessors are
  *    known.  If several blocks are built at once, mature_immBlock can only be called
  *    after set_value has been called for all values that are life at the end
- *    of the block.  This is necessary so that Phi nodes created mature_immBlock *    get the right predecessors in case of cyclic dependencies.  If all set_values
+ *    of the block.  This is necessary so that Phi nodes created mature_immBlock
+ *    get the right predecessors in case of cyclic dependencies.  If all set_values
  *    of this block are called after maturing it and before calling get_value
  *    in some block that is control flow dependent on this block, the construction
  *    is correct.
  *    later) optimizations are skipped.  This is necessary to
  *    construct Blocks in loops.  Leaving Unknown in the Block after finishing
  *    the construction may have strange effects, especially for interprocedural
- *    representation and analyses.
+ *    representation and analysis.
  *
  *
  *    CONTROL FLOW OPERATIONS
  *                      ------------
  *
  *    Selects a field from an array type.  The entity has as owner the array, as
- *    type the arrays element type.  The indexes to access an array element are
+ *    type the arrays element type.  The indices to access an array element are
  *    given also.
  *
  *    Parameters:
  *      *store     The memory in which the object the entity should be selected from
  *                 is allocated.
  *      *frame     The pointer to the object.
- *      *arity     number of array indexes.
+ *      *arity     number of array indices.
  *      *in        array with index inputs to the node.
  *      *sel       The entity to select.
  *
  *    ir_node *new_Minus (ir_node *op, ir_mode *mode)
  *    -----------------------------------------------
  *
- *    Unary Minus operations on floating point values.
+ *    Unary Minus operations on integer and floating point values.
  *
  *    ir_node *new_Mul (ir_node *op1, ir_node *op2, ir_mode *mode)
  *    ------------------------------------------------------------
  *    Output:
  *      A 16-tuple containing the results of the 16 different comparisons.
  *      The following is a list giving the comparisons and a projection
- *      number (pnc_number) to use in Proj nodes to extract the proper result.
- *        False     false
- *        Eq        equal
- *        Lt    less
- *        Le    less or equal
- *        Gt    greater
- *        Ge    greater of equal
- *        Lg    less or greater
- *        Leg   less, equal or greater = ordered
- *        Uo    unordered
- *        Ue    unordered or equal
- *        Ul    unordered or less
- *        Ule   unordered, less or equal
- *        Ug    unordered or greater
- *        Uge   unordered, greater or equal
- *        Ne    unordered, less or greater = not equal
- *        True  true
+ *      number (pn_Cmp) to use in Proj nodes to extract the proper result.
+ *        pn_Cmp_False false
+ *        pn_Cmp_Eq    equal
+ *        pn_Cmp_Lt    less
+ *        pn_Cmp_Le    less or equal
+ *        pn_Cmp_Gt    greater
+ *        pn_Cmp_Ge    greater of equal
+ *        pn_Cmp_Lg    less or greater
+ *        pn_Cmp_Leg   less, equal or greater = ordered
+ *        pn_Cmp_Uo    unordered
+ *        pn_Cmp_Ue    unordered or equal
+ *        pn_Cmp_Ul    unordered or less
+ *        pn_Cmp_Ule   unordered, less or equal
+ *        pn_Cmp_Ug    unordered or greater
+ *        pn_Cmp_Uge   unordered, greater or equal
+ *        pn_Cmp_Ne    unordered, less or greater = not equal
+ *        pn_Cmp_True  true
  *
  *
  *
  *    later) optimizations are skipped.  This is necessary to
  *    construct Phi nodes in loops.  Leaving Unknown in the Phi after finishing
  *    the construction may have strange effects, especially for interprocedural
- *    representation and analyses.
+ *    representation and analysis.
  *
  *    Parameter
  *      arity            number of predecessors
  *    Output
  *      The definition valid in this block.
  *
+ *    ir_node *new_Mux (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode)
+ *    -----------------------------------------------------------------------------
+ *
+ *    Creates a Mux node. This node implements the following semantic:
+ *    If the sel node (which must be of mode_b) evaluates to true, its value is
+ *    ir_true, else ir_false;
+ *
  *
  *    OPERATIONS TO MANAGE MEMORY EXPLICITLY
  *    --------------------------------------
  *      a.*type          A pointer to the class the allocated data object
  *                       belongs to.
  *
- *    ir_node *new_Free (ir_node *store, ir_node *ptr, type *free_type)
- *    ------------------------------------------------------------------
+ *    ir_node *new_Free (ir_node *store, ir_node *ptr, ir_node *size, type *free_type,
+ *    --------------------------------------------------------------------------------
+ *                        where_alloc where)
+ *                        ------------------
  *
  *    The Free node frees memory of the given variable.
  *
  *      *ptr         The pointer to the object to free.
  *      *size        The number of objects of type free_type to free in a sequence.
  *      *free_type   The type of the freed variable.
+ *      where        Where the variable was allocated, either heap_alloc or stack_alloc.
  *
  *    Inputs:
  *      A memory, a pointer and an unsigned integer.
  *    unifying the memories with a preceding Sync operation.
  *
  *    Parameters
- *      arity    The number of memories to syncronize.
+ *      arity    The number of memories to synchronize.
  *      **in     An array of pointers to nodes that produce an output of
  *               type memory.
  *    Inputs
  *
  *    There are two special routines for the global store:
  *
- *    inline void set_store (ir_node *store)
- *    --------------------------------------
+ *    void set_store (ir_node *store)
+ *    -------------------------------
  *
  *    Adds the store to the array of known values at a reserved
  *    position.
  *    Requires current_block to be set correctly.
  *
- *    inline ir_node *get_store (void)
- *    --------------------------------
+ *    ir_node *get_store (void)
+ *    -------------------------
  *
  *    Returns the node defining the actual store.
  *    Requires current_block to be set correctly.
@@ -1135,7 +1147,7 @@ ir_node *new_rd_Raise  (dbg_info *db, ir_graph *irg, ir_node *block,
  * @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 *mode  The mode of the operands and redults.
+ * @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.
  */
@@ -1151,7 +1163,7 @@ ir_node *new_rd_Const_type (dbg_info* db, ir_graph *irg, ir_node *block,
  * @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 *mode  The mode of the operands and redults.
+ * @param *mode  The mode of the operands and results.
  * @param *con   Points to an entry in the constant table.
  */
 ir_node *new_rd_Const  (dbg_info *db, ir_graph *irg, ir_node *block,
@@ -1201,28 +1213,28 @@ ir_node *new_rd_SymConst (dbg_info *db, ir_graph *irg, ir_node *block,
  *
  * 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. */
+ * Adds the SymConst to the start block of irg. */
 ir_node *new_rd_SymConst_addr_ent (dbg_info *db, ir_graph *irg, entity *symbol, 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. */
+ * Adds the SymConst to the start block of irg. */
 ir_node *new_rd_SymConst_addr_name (dbg_info *db, ir_graph *irg, ident *symbol, 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. */
+ * Adds the SymConst to the start block of irg. */
 ir_node *new_rd_SymConst_type_tag (dbg_info *db, ir_graph *irg, type *symbol, type *tp);
 
 /** Constructor for a SymConst size 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. */
+ * Adds the SymConst to the start block of irg. */
 ir_node *new_rd_SymConst_size (dbg_info *db, ir_graph *irg, type *symbol, type *tp);
 
 /** Constructor for a Sel node.
@@ -1231,7 +1243,7 @@ ir_node *new_rd_SymConst_size (dbg_info *db, ir_graph *irg, type *symbol, type *
  * with a compound type.  It explicitly specifies the entity selected.
  * Dynamically the node may select entities that overwrite the given
  * entity.  If the selected entity is an array element entity the Sel
- * node takes the required array indicees as inputs.
+ * node takes the required array indices as inputs.
  *
  * @param   *db        A pointer for debug information.
  * @param   *irg       The ir graph the node  belongs to.
@@ -1240,8 +1252,8 @@ ir_node *new_rd_SymConst_size (dbg_info *db, ir_graph *irg, type *symbol, type *
  *                     from is allocated.
  * @param   *objptr    A pointer to a compound entity the Sel operation selects a
  *                     single attribute from.
- * @param   *n_index   The number of array indicees needed to select an array element entity.
- * @param   *index[]   If the compound entity is an array the indicees of the selected
+ * @param   *n_index   The number of array indices needed to select an array element entity.
+ * @param   *index[]   If the compound entity is an array the indices of the selected
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
@@ -1578,9 +1590,10 @@ ir_node *new_rd_Alloc  (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st
  * @param *ptr        The pointer to the object to free.
  * @param *size       The number of objects of type free_type to free in a sequence.
  * @param *free_type  The type of the freed variable.
+ * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
 ir_node *new_rd_Free   (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *store,
-                       ir_node *ptr, ir_node *size, type *free_type);
+                       ir_node *ptr, ir_node *size, type *free_type, where_alloc where);
 
 /** Constructor for a Sync node.
  *
@@ -1591,7 +1604,7 @@ ir_node *new_rd_Free   (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *st
  * @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  arity    The number of memories to syncronize.
+ * @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.
  */
@@ -1602,7 +1615,7 @@ ir_node *new_rd_Sync   (dbg_info *db, ir_graph *irg, ir_node *block, int arity,
  * Projects a single value out of a tuple.  The parameter proj gives the
  * position of the value within the tuple.
  *
- * @param *db    A pointer for deubugginformation.
+ * @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 arg    A node producing a tuple.  The node must have mode_T.
@@ -1734,6 +1747,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 *block  The block the node belong to.
  * @param *arg  The tuple value to project from.
@@ -1752,6 +1766,21 @@ ir_node *new_rd_Filter (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *ar
  */
 ir_node *new_rd_NoMem  (ir_graph *irg);
 
+/** Constructor for a Mux node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *db       A pointer for debug information.
+ * @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.
+ * @param *ir_false The ir_node that calculates the false result.
+ * @param *mode     The mode of the node (and it_true and ir_false).
+ */
+ir_node *new_rd_Mux  (dbg_info *db, ir_graph *irg, ir_node *block,
+    ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+
 /*-------------------------------------------------------------------------*/
 /* The raw interface without debug support                                 */
 /*-------------------------------------------------------------------------*/
@@ -1818,7 +1847,7 @@ ir_node *new_r_Cond   (ir_graph *irg, ir_node *block, ir_node *c);
  * @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 indexes.
+ * @param arity  Number of array indices.
  * @param *in[]   Array with index inputs to the node. The constructor copies this array.
  */
 ir_node *new_r_Return (ir_graph *irg, ir_node *block,
@@ -1848,6 +1877,20 @@ ir_node *new_r_Raise  (ir_graph *irg, ir_node *block,
 ir_node *new_r_Const  (ir_graph *irg, ir_node *block,
                       ir_mode *mode, tarval *con);
 
+/** Constructor for a Const node.
+ *
+ * Constructor for a Const node. The constant represents a target
+ * 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 *mode  The mode of the operands and the results.
+ * @param value  A value from which the tarval is made.
+ */
+ir_node *new_r_Const_long(ir_graph *irg, ir_node *block,
+                      ir_mode *mode, long value);
+
 /** Constructor for a SymConst node.
  *
  *  This is the constructor for a symbolic constant.
@@ -1871,7 +1914,7 @@ ir_node *new_r_Const  (ir_graph *irg, ir_node *block,
  *
  * @param *irg    The ir graph the node  belongs to.
  * @param *block  The ir block the node belongs to.
- * @param volue   A type, entity or a ident depending on the SymConst kind.
+ * @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,
@@ -1883,7 +1926,7 @@ ir_node *new_r_SymConst (ir_graph *irg, ir_node *block,
  * with a compound type.  It explicitly specifies the entity selected.
  * Dynamically the node may select entities that overwrite the given
  * entity.  If the selected entity is an array element entity the Sel
- * node takes the required array indicees as inputs.
+ * 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.
@@ -1891,8 +1934,8 @@ ir_node *new_r_SymConst (ir_graph *irg, ir_node *block,
  *                     from is allocated.
  * @param   *objptr    A pointer to a compound entity the Sel operation selects a
  *                     single attribute from.
- * @param   *n_index   The number of array indicees needed to select an array element entity.
- * @param   *index[]   If the compound entity is an array the indicees of the selected
+ * @param   *n_index   The number of array indices needed to select an array element entity.
+ * @param   *index[]   If the compound entity is an array the indices of the selected
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
@@ -2203,9 +2246,10 @@ ir_node *new_r_Alloc  (ir_graph *irg, ir_node *block, ir_node *store,
  * @param *ptr        The pointer to the object to free.
  * @param *size       The number of objects of type free_type to free in a sequence.
  * @param *free_type  The type of the freed variable.
+ * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
 ir_node *new_r_Free   (ir_graph *irg, ir_node *block, ir_node *store,
-               ir_node *ptr, ir_node *size, type *free_type);
+               ir_node *ptr, ir_node *size, type *free_type, where_alloc where);
 
 /** Constructor for a  Sync node.
  *
@@ -2215,7 +2259,7 @@ ir_node *new_r_Free   (ir_graph *irg, ir_node *block, ir_node *store,
  *
  * @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 syncronize.
+ * @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.
  */
@@ -2304,7 +2348,7 @@ ir_node *new_r_Confirm (ir_graph *irg, ir_node *block,
 
 /** Constructor for a Unknown node.
  *
- * Represents an arbtrary valus.  Places the node in
+ * Represents an arbitrary value.  Places the node in
  * the start block.
  *
  * @param *irg    The ir graph the node  belongs to.
@@ -2321,7 +2365,7 @@ ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m);
  *
  * @param *irg    The ir graph the node belong to.
  * @param *block  The block the node belong to.
- * @param *callee The call node bisible in the  intra procedural view.
+ * @param *callee The call node visible in the  intra procedural view.
  */
 ir_node *new_r_CallBegin(ir_graph *irg, ir_node *block, ir_node *callee);
 
@@ -2384,6 +2428,20 @@ ir_node *new_r_Filter (ir_graph *irg, ir_node *block, ir_node *arg,
  */
 ir_node *new_r_NoMem  (ir_graph *irg);
 
+/** Constructor for a Mux node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @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.
+ * @param *ir_false The ir_node that calculates the false result.
+ * @param *mode     The mode of the node (and it_true and ir_false).
+ */
+ir_node *new_r_Mux  (ir_graph *irg, ir_node *block,
+    ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+
 /*-----------------------------------------------------------------------*/
 /* The block oriented interface                                          */
 /*-----------------------------------------------------------------------*/
@@ -2410,7 +2468,7 @@ ir_node *get_cur_block(void);
  * with a fixed number of predecessors.  Does set current_block.  Can
  * be used with automatic Phi node construction.
  *
- * @param *db    A Pointer for  debugginfomation.
+ * @param *db    A Pointer for debug information.
  * @param arity  The number of control predecessors.
  * @param in[]   An array of control predecessors.  The length of
  *               the array must be 'arity'.
@@ -2470,7 +2528,7 @@ ir_node *new_d_Cond   (dbg_info* db, ir_node *c);
  *
  * @param *db    A pointer for debug information.
  * @param *store The state of memory.
- * @param arity  Number of array indexes.
+ * @param arity  Number of array indices.
  * @param *in    Array with index inputs to the node.
  */
 
@@ -2495,12 +2553,11 @@ ir_node *new_d_Raise  (dbg_info* db, ir_node *store, ir_node *obj);
  * level type information for the constant value.
  *
  * @param *db    A pointer for debug information.
- * @param *mode  The mode of the operands and redults.
+ * @param *mode  The mode of the operands and results.
  * @param *con   Points to an entry in the constant table. This pointer is
                  added to the attributes of the node.
- * @param *tp    The type of the constante.
+ * @param *tp    The type of the constant.
  */
-
 ir_node *new_d_Const_type (dbg_info* db, ir_mode *mode, tarval *con, type *tp);
 
 /** Constructor for a Const node.
@@ -2512,7 +2569,7 @@ ir_node *new_d_Const_type (dbg_info* db, ir_mode *mode, tarval *con, type *tp);
  * supported: If tv is entity derives a somehow useful type.)
  *
  * @param *db    A pointer for debug information.
- * @param *mode  The mode of the operands and redults.
+ * @param *mode  The mode of the operands and results.
  * @param *con   Points to an entry in the constant table. This pointer is added
  *               to the attributes of the node.
  */
@@ -2575,7 +2632,7 @@ ir_node *new_d_simpleSel(dbg_info* db, ir_node *store, ir_node *objptr, entity *
  * with a compound type.  It explicitly specifies the entity selected.
  * Dynamically the node may select entities that overwrite the given
  * entity.  If the selected entity is an array element entity the Sel
- * node takes the required array indicees as inputs.
+ * node takes the required array indices as inputs.
  * Adds the node to the block in current_ir_block.
  *
  * @param   *db        A pointer for debug information.
@@ -2583,8 +2640,8 @@ ir_node *new_d_simpleSel(dbg_info* db, ir_node *store, ir_node *objptr, entity *
  *                     from is allocated.
  * @param   *objptr    A pointer to a compound entity the Sel operation selects a
  *                     single attribute from.
- * @param   *n_index   The number of array indicees needed to select an array element entity.
- * @param   *index[]   If the compound entity is an array the indicees of the selected
+ * @param   *n_index   The number of array indices needed to select an array element entity.
+ * @param   *index[]   If the compound entity is an array the indices of the selected
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
@@ -2842,7 +2899,7 @@ ir_node *new_d_Cast   (dbg_info* db, ir_node *op, type *to_tp);
  *
  * Adds the node to the block in current_ir_block.
  *
- * @param *db    A pointer for debugginaromation.
+ * @param *db    A pointer for debug information.
  * @param arity  The number of predecessors
  * @param *in    Array with predecessors
  * @param *mode  The mode of it's inputs and output.
@@ -2896,9 +2953,10 @@ ir_node *new_d_Alloc  (dbg_info* db, ir_node *store, ir_node *size, type *alloc_
  * @param *ptr        The pointer to the object to free.
  * @param *size       The number of objects of type free_type to free in a sequence.
  * @param *free_type  The type of the freed variable.
+ * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
 ir_node *new_d_Free   (dbg_info* db, ir_node *store, ir_node *ptr, ir_node *size,
-             type *free_type);
+             type *free_type, where_alloc where);
 
 /** Constructor for a Sync node.
  *
@@ -2908,7 +2966,7 @@ ir_node *new_d_Free   (dbg_info* db, ir_node *store, ir_node *ptr, ir_node *size
  * Adds the node to the block in current_ir_block.
  *
  * @param *db       A pointer for debug information.
- * @param  arity    The number of memories to syncronize.
+ * @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.
  */
@@ -2921,7 +2979,7 @@ ir_node *new_d_Sync   (dbg_info* db, int arity, ir_node *in[]);
  * position of the value within the tuple.
  * Adds the node to the block in current_ir_block.
  *
- * @param *db    A pointer for deubugginformation.
+ * @param *db    A pointer for deubug information.
  * @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.
@@ -2964,7 +3022,7 @@ ir_node *new_d_Tuple  (dbg_info* db, int arity, ir_node *in[]);
  */
 ir_node *new_d_Id     (dbg_info* db, ir_node *val, ir_mode *mode);
 
-/** Costructor for a Bad node.
+/** Constructor for a Bad node.
  *
  * Returns the unique Bad node of the graph.  The same as
  * get_irg_bad().
@@ -2989,7 +3047,7 @@ ir_node *new_d_Confirm (dbg_info* db, ir_node *val, ir_node *bound, pn_Cmp cmp);
 
 /** Constructor for an Unknown node.
  *
- * Represents an arbtrary valus.  Places the node in
+ * Represents an arbitrary value.  Places the node in
  * the start block.
  *
  * @param *m      The mode of the unknown value.
@@ -3004,7 +3062,7 @@ ir_node *new_d_Unknown(ir_mode *m);
  * node.Adds the node to the block in current_ir_block.
  *
  * @param *db     A pointer for debug information.
- * @param *callee The call node bisible in the  intra procedural view.
+ * @param *callee The call node visible in the  intra procedural view.
  */
 ir_node *new_d_CallBegin(dbg_info *db, ir_node *callee);
 
@@ -3016,7 +3074,7 @@ ir_node *new_d_CallBegin(dbg_info *db, ir_node *callee);
  */
 ir_node *new_d_EndReg (dbg_info *db);
 
-/** Constructor for an Endexcept node.
+/** Constructor for an EndExcept node.
  *
  * Used to represent regular procedure end in interprocedual view.
  * Adds the node to the block in current_ir_block.
@@ -3066,11 +3124,24 @@ ir_node *new_d_Filter (dbg_info *db, ir_node *arg, ir_mode *mode, long proj);
  */
 ir_node *new_d_NoMem  (void);
 
+/** Constructor for a Mux node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *db       A pointer for debug information.
+ * @param *sel      The ir_node that calculates the boolean select.
+ * @param *ir_true  The ir_node that calculates the true result.
+ * @param *ir_false The ir_node that calculates the false result.
+ * @param *mode     The mode of the node (and it_true and ir_false).
+ */
+ir_node *new_d_Mux  (dbg_info *db, ir_node *sel,
+    ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+
 /*-----------------------------------------------------------------------*/
 /* The block oriented interface without debug support                    */
 /*-----------------------------------------------------------------------*/
 
-/* Needed from the interfase with debug support:
+/* Needed from the interface with debug support:
 void set_cur_block (ir_node *target);   */
 
 /** Constructor for a Block node.
@@ -3150,7 +3221,7 @@ ir_node *new_Cond   (ir_node *c);
  * can end regular control flow. Adds the node to the block in current_ir_block.
  *
  * @param *store The state of memory.
- * @param arity  Number of array indexes.
+ * @param arity  Number of array indices.
  * @param *in    Array with index inputs to the node.
  */
 ir_node *new_Return (ir_node *store, int arity, ir_node *in[]);
@@ -3171,12 +3242,25 @@ ir_node *new_Raise  (ir_node *store, ir_node *obj);
  * supported: If tv is entity derives a somehow useful type.)
  * Adds the node to the block in current_ir_block.
  *
- * @param *mode  The mode of the operands and redults.
+ * @param *mode  The mode of the operands and results.
  * @param *con   Points to an entry in the constant table. This pointer is
  *               added to the attributes of  the node.
  */
 ir_node *new_Const  (ir_mode *mode, tarval *con);
 
+/**
+ * Make a const from a long.
+ * This is just convenience for the usual
+ * <code>
+ * new_Const(mode, tarval_from_long(mode, ...))
+ * </code>
+ * pain.
+ * @param mode The mode for the const.
+ * @param value The value of the constant.
+ * @return A new const node.
+ */
+ir_node *new_Const_long(ir_mode *mode, long value);
+
 /** Constructor for a Const node.
  *
  * Derives mode from passed type. */
@@ -3227,15 +3311,15 @@ ir_node *new_simpleSel(ir_node *store, ir_node *objptr, entity *ent);
  * with a compound type.  It explicitly specifies the entity selected.
  * Dynamically the node may select entities that overwrite the given
  * entity.  If the selected entity is an array element entity the Sel
- * node takes the required array indicees as inputs.
+ * node takes the required array indices as inputs.
  * Adds the node to the block in current_ir_block.
  *
  * @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
  *                     single attribute from.
- * @param   *n_index   The number of array indicees needed to select an array element entity.
- * @param   *index[]   If the compound entity is an array the indicees of the selected
+ * @param   *n_index   The number of array indices needed to select an array element entity.
+ * @param   *index[]   If the compound entity is an array the indices of the selected
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
@@ -3519,9 +3603,10 @@ ir_node *new_Alloc  (ir_node *store, ir_node *size, type *alloc_type,
  * @param *ptr        The pointer to the object to free.
  * @param *size       The number of objects of type free_type to free in a sequence.
  * @param *free_type  The type of the freed variable.
+ * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
 ir_node *new_Free   (ir_node *store, ir_node *ptr, ir_node *size,
-                    type *free_type);
+                    type *free_type, where_alloc where);
 
 /** Constructor for a  Sync node.
  *
@@ -3530,7 +3615,7 @@ ir_node *new_Free   (ir_node *store, ir_node *ptr, ir_node *size,
  * value in all memories where it occurs.
  * Adds the node to the block in current_ir_block.
  *
- * @param  arity    The number of memories to syncronize.
+ * @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.
  */
@@ -3633,6 +3718,17 @@ ir_node *new_Unknown(ir_mode *m);
  */
 ir_node *new_NoMem  (void);
 
+/** Constructor for a Mux node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param *sel      The ir_node that calculates the boolean select.
+ * @param *ir_true  The ir_node that calculates the true result.
+ * @param *ir_false The ir_node that calculates the false result.
+ * @param *mode     The mode of the node (and it_true and ir_false).
+ */
+ir_node *new_Mux  (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+
 /*---------------------------------------------------------------------*/
 /* The comfortable interface.                                          */
 /* Supports automatic Phi node construction.                           */
@@ -3717,23 +3813,31 @@ type *get_cur_frame_type(void);
 /* --- initialize and finalize ir construction --- */
 
 /** Puts the graph into state "phase_high" */
-void finalize_cons (ir_graph *irg);
+void irg_finalize_cons (ir_graph *irg);
+
+/** Puts the program and all graphs into state phase_high.
+ *
+ * This also remarks, the construction of types is finished,
+ * e.g., that no more subtypes will be added.  */
+void irp_finalize_cons(void);
 
 /* --- Initialization --- */
 
 /**
  * This function is called, whenever a local variable is used before definition
  *
- * @parameter mode      the mode of the local var
- * @pos                 position choosen be the frontend for this var
+ * @param irg       the IR graph on which this happens
+ * @param mode      the mode of the local var
+ * @param pos       position chosen be the frontend for this variable (n_loc)
  *
- * @return a firm node of mode @p mode that initialises the var at position pos
+ * @return a firm node of mode @p mode that initializes the var at position pos
  *
  * @note
  *      Do not return NULL
- *      If this function is not set, FIRM will create a const node with tarval BAD
+ *      If this function is not set, FIRM will create a const node with tarval BAD.
+ *      Use set_irg_loc_description()/get_irg_loc_description() to assign additional
+ *      informations to local variables.
  */
-typedef ir_node *default_initialize_local_variable_func_t(ir_mode *mode, int pos);
-
+typedef ir_node *uninitialized_local_variable_func_t(ir_graph *irg, ir_mode *mode, int pos);
 
 # endif /* _IRCONS_H_ */