s/irn_not_visited(x)/!irn_visited(x)/.
[libfirm] / include / libfirm / ircons.h
index 463dd38..8b66787 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
  *    set_cur_block(block).  If several blocks are constructed in parallel block
  *    switches need to be performed constantly.
  *
- *    To generate a Block node (with the comfortable interface) it's predecessor
+ *    To generate a Block node (with the comfortable interface), its predecessor
  *    control flow nodes need not be known.  In case of cyclic control flow these
  *    can not be known when the block is constructed.  With add_immBlock_pred(block,
  *    cfnode) predecessors can be added to the block.  If all predecessors are
  *    ir_node *new_Shl    (ir_node *op,  ir_node *k,   ir_mode *mode);
  *    ir_node *new_Shr    (ir_node *op,  ir_node *k,   ir_mode *mode);
  *    ir_node *new_Shrs   (ir_node *op,  ir_node *k,   ir_mode *mode);
- *    ir_node *new_Rot    (ir_node *op,  ir_node *k,   ir_mode *mode);
+ *    ir_node *new_Rotl   (ir_node *op,  ir_node *k,   ir_mode *mode);
  *    ir_node *new_Cmp    (ir_node *op1, ir_node *op2);
  *    ir_node *new_Conv   (ir_node *op, ir_mode *mode);
  *    ir_node *new_Cast   (ir_node *op, ir_type *to_tp);
  *    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);
- *    ir_node *new_Psi    (int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode);
  *    ir_node *new_CopyB  (ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type);
  *    ir_node *new_InstOf (ir_node *store, ir_node obj, ir_type *ent);
  *    ir_node *new_Raise  (ir_node *store, ir_node *obj);
  *
  *    Arithmetic shift right, i.e., sign extended.
  *
- *    ir_node *new_Rot (ir_node *op, ir_node *k, ir_mode *mode)
+ *    ir_node *new_Rotl (ir_node *op, ir_node *k, ir_mode *mode)
  *    ---------------------------------------------------------
  *
- *    Rotates the operand to the (right?) by k bits.
+ *    Rotates the operand to the left by k bits.
  *
  *    ir_node *new_Carry (ir_node *op1, ir_node *op2, ir_mode *mode)
  *    ------------------------------------------------------------
  *    ir_true, else ir_false;
  *
  *
- *    ir_node *new_Psi (int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode)
- *    -----------------------------------------------------------------------------
- *
- *    Creates a Psi node. This node implements the following semantic:
- *    Enter it here!!!
- *
  *
  *    OPERATIONS TO MANAGE MEMORY EXPLICITLY
  *    --------------------------------------
@@ -1216,7 +1209,7 @@ ir_node *new_rd_Cond   (dbg_info *db, ir_graph *irg, ir_node *block, ir_node *c)
 
 /** Constructor for a Return node.
  *
- * Returns the memory an zero or more return values.  Only node that
+ * Returns the memory and zero or more return values.  Only node that
  * can end regular control flow.
  *
  * @param *db    A pointer for debug information.
@@ -1515,6 +1508,20 @@ ir_node *new_rd_DivMod (dbg_info *db, ir_graph *irg, ir_node *block,
 ir_node *new_rd_Div    (dbg_info *db, ir_graph *irg, ir_node *block,
                ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
+/** Constructor for a remainderless 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   *memop The store needed to model exceptions
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
+ */
+ir_node *new_rd_DivRL  (dbg_info *db, ir_graph *irg, ir_node *block,
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+
 /** Constructor for a Mod node.
  *
  * @param   *db    A pointer for debug information.
@@ -1634,7 +1641,7 @@ ir_node *new_rd_Shr    (dbg_info *db, ir_graph *irg, ir_node *block,
 ir_node *new_rd_Shrs   (dbg_info *db, ir_graph *irg, ir_node *block,
                ir_node *op, ir_node *k, ir_mode *mode);
 
-/** Constructor for a Rot node.
+/** Constructor for a Rotl node.
  *
  * @param   *db    A pointer for debug information.
  * @param   *irg   The IR graph the node  belongs to.
@@ -1643,7 +1650,7 @@ ir_node *new_rd_Shrs   (dbg_info *db, ir_graph *irg, ir_node *block,
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_rd_Rot    (dbg_info *db, ir_graph *irg, ir_node *block,
+ir_node *new_rd_Rotl    (dbg_info *db, ir_graph *irg, ir_node *block,
                ir_node *op, ir_node *k, ir_mode *mode);
 
 
@@ -1947,19 +1954,6 @@ ir_node *new_rd_NoMem  (ir_graph *irg);
 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);
 
-/** Constructor for a Psi node.
- *
- * @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 *arity    The arity of the conditions
- * @param *conds    The array of mode_b conditions, length must be equal arity
- * @param *vals     The array of mode values, length must be equal arity + 1
- * @param *mode     The mode of the node (must be the mode of all vals).
- */
-ir_node *new_rd_Psi (dbg_info *db, ir_graph *irg, ir_node *block,
-                     int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode);
-
 /** Constructor for a CopyB node.
  *
  * @param *db         A pointer for debug information.
@@ -2115,7 +2109,7 @@ ir_node *new_r_Cond   (ir_graph *irg, ir_node *block, ir_node *c);
 
 /** Constructor for a Return node.
  *
- * Returns the memory an zero or more return values.  Only node that
+ * Returns the memory and zero or more return values.  Only node that
  * can end regular control flow.
  *
  * @param *irg   The IR graph the node  belongs to.
@@ -2349,6 +2343,19 @@ ir_node *new_r_DivMod (ir_graph *irg, ir_node *block,
 ir_node *new_r_Div    (ir_graph *irg, ir_node *block,
                ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
+/** Constructor for a remainderless Div node.
+ *
+ * @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.
+ * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
+ */
+ir_node *new_r_DivRL  (ir_graph *irg, ir_node *block,
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+
 /** Constructor for a Mod node.
  *
  * @param   *irg   The IR graph the node  belongs to.
@@ -2459,7 +2466,7 @@ ir_node *new_r_Shr    (ir_graph *irg, ir_node *block,
 ir_node *new_r_Shrs   (ir_graph *irg, ir_node *block,
                ir_node *op, ir_node *k, ir_mode *mode);
 
-/** Constructor for a Rot node.
+/** Constructor for a Rotl node.
  *
  * @param   *irg   The IR graph the node  belongs to.
  * @param   *block The IR block the node belongs to.
@@ -2467,7 +2474,7 @@ ir_node *new_r_Shrs   (ir_graph *irg, ir_node *block,
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_r_Rot    (ir_graph *irg, ir_node *block,
+ir_node *new_r_Rotl   (ir_graph *irg, ir_node *block,
                ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Conv node.
@@ -2764,18 +2771,6 @@ ir_node *new_r_NoMem  (ir_graph *irg);
 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);
 
-/** Constructor for a Psi node.
- *
- * @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
- * @param *vals     The array of mode values, length must be equal arity + 1
- * @param *mode     The mode of the node (must be the mode of all vals).
- */
-ir_node *new_r_Psi (ir_graph *irg, ir_node *block,
-                    int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode);
-
 /** Constructor for a CopyB node.
  *
  * @param *irg        The IR graph the node belong to.
@@ -2943,7 +2938,7 @@ ir_node *new_d_Cond   (dbg_info *db, ir_node *c);
  *
  * Adds the node to the block in current_ir_block.
  *
- * Returns the memory an zero or more return values.  Only node that
+ * Returns the memory and zero or more return values.  Only node that
  * can end regular control flow.
  *
  * @param *db    A pointer for debug information.
@@ -3167,6 +3162,19 @@ ir_node *new_d_DivMod (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2,
  */
 ir_node *new_d_Div    (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
+/** Constructor for a remainderless Div node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param   *db    A pointer for debug information.
+ * @param   *memop The store needed to model exceptions
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
+ */
+ir_node *new_d_DivRL  (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+
 /** Constructor for a Mod node.
  *
  * Adds the node to the block in current_ir_block.
@@ -3266,7 +3274,7 @@ ir_node *new_d_Shr    (dbg_info *db, ir_node *op,  ir_node *k,   ir_mode *mode);
  */
 ir_node *new_d_Shrs   (dbg_info *db, ir_node *op,  ir_node *k,   ir_mode *mode);
 
-/** Constructor for a Rot node.
+/** Constructor for a Rotl node.
  *
  * Adds the node to the block in current_ir_block.
  *
@@ -3275,7 +3283,7 @@ ir_node *new_d_Shrs   (dbg_info *db, ir_node *op,  ir_node *k,   ir_mode *mode);
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_d_Rot    (dbg_info *db, ir_node *op,  ir_node *k,   ir_mode *mode);
+ir_node *new_d_Rotl   (dbg_info *db, ir_node *op,  ir_node *k,   ir_mode *mode);
 
 /** Constructor for a Cmp node.
  *
@@ -3576,17 +3584,6 @@ ir_node *new_d_NoMem  (void);
 ir_node *new_d_Mux  (dbg_info *db, ir_node *sel,
     ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
 
-/** Constructor for a Psi node.
- *
- * @param *db       A pointer for debug information.
- * @param *arity    The arity of the conditions
- * @param *conds    The array of mode_b conditions, length must be equal arity
- * @param *vals     The array of mode values, length must be equal arity + 1
- * @param *mode     The mode of the node (must be the mode of all vals).
- */
-ir_node *new_d_Psi (dbg_info *db,
-                    int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode);
-
 /** Constructor for a CopyB node.
  *
  * @param *db         A pointer for debug information.
@@ -3743,7 +3740,7 @@ ir_node *new_Cond   (ir_node *c);
 
 /** Constructor for a Return node.
  *
- * Returns the memory an zero or more return values.  Only node that
+ * Returns the memory and zero or more return values.  Only node that
  * can end regular control flow. Adds the node to the block in current_ir_block.
  *
  * @param *store The state of memory.
@@ -3989,6 +3986,18 @@ ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode,
  */
 ir_node *new_Div    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
+/** Constructor for a remainderless Div node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param   *memop The store needed to model exceptions
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
+ */
+ir_node *new_DivRL  (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+
 /** Constructor for a Mod node.
  *
  * Adds the node to the block in current_ir_block.
@@ -4076,7 +4085,7 @@ ir_node *new_Shr    (ir_node *op,  ir_node *k,   ir_mode *mode);
  */
 ir_node *new_Shrs   (ir_node *op,  ir_node *k,   ir_mode *mode);
 
-/** Constructor for a Rot node.
+/** Constructor for a Rotl node.
  *
  * Adds the node to the block in current_ir_block.
  *
@@ -4084,7 +4093,7 @@ ir_node *new_Shrs   (ir_node *op,  ir_node *k,   ir_mode *mode);
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_Rot    (ir_node *op,  ir_node *k,   ir_mode *mode);
+ir_node *new_Rotl   (ir_node *op,  ir_node *k,   ir_mode *mode);
 
 /** Constructor for a Cmp node.
  *
@@ -4318,15 +4327,6 @@ ir_node *new_NoMem  (void);
  */
 ir_node *new_Mux  (ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
 
-/** Constructor for a Psi node.
- *
- * @param *arity    The arity of the conditions
- * @param *conds    The array of mode_b conditions, length must be equal arity
- * @param *vals     The array of mode values, length must be equal arity + 1
- * @param *mode     The mode of the node (must be the mode of all vals).
- */
-ir_node *new_Psi (int arity, ir_node *conds[], ir_node *vals[], ir_mode *mode);
-
 /** Constructor for a CopyB node.
  *
  * Adds the node to the block in current_ir_block.