fix
[libfirm] / ir / ir / irnode.c
index c638b86..fb96fa8 100644 (file)
@@ -1,15 +1,28 @@
 /*
- * Project:     libFIRM
- * File name:   ir/ir/irnode.c
- * Purpose:     Representation of an intermediate operation.
- * Author:      Martin Trapp, Christian Schaefer
- * Modified by: Goetz Lindenmaier, Michael Beck
- * Created:
- * CVS-ID:      $Id$
- * Copyright:   (c) 1998-2006 Universität Karlsruhe
- * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
+ * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
  */
 
+/**
+ * @file
+ * @brief   Representation of an intermediate operation.
+ * @author  Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Michael Beck
+ * @version $Id$
+ */
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
@@ -584,17 +597,15 @@ get_irn_block_attr(ir_node *node) {
 }
 
 load_attr
-get_irn_load_attr(ir_node *node)
-{
-  assert(node->op == op_Load);
-  return node->attr.load;
+get_irn_load_attr(ir_node *node) {
+       assert(node->op == op_Load);
+       return node->attr.load;
 }
 
 store_attr
-get_irn_store_attr(ir_node *node)
-{
-  assert(node->op == op_Store);
-  return node->attr.store;
+get_irn_store_attr(ir_node *node) {
+       assert(node->op == op_Store);
+       return node->attr.store;
 }
 
 except_attr
@@ -604,9 +615,14 @@ get_irn_except_attr(ir_node *node) {
        return node->attr.except;
 }
 
-void *
-get_irn_generic_attr(ir_node *node) {
-       return &node->attr;
+void *(get_irn_generic_attr)(ir_node *node) {
+       assert(is_ir_node(node));
+       return _get_irn_generic_attr(node);
+}
+
+const void *(get_irn_generic_attr_const)(const ir_node *node) {
+       assert(is_ir_node(node));
+       return _get_irn_generic_attr_const(node);
 }
 
 unsigned (get_irn_idx)(const ir_node *node) {
@@ -729,7 +745,7 @@ set_Block_matured(ir_node *node, int matured) {
 }
 
 unsigned long
-(get_Block_block_visited)(ir_node *node) {
+(get_Block_block_visited)(const ir_node *node) {
        return _get_Block_block_visited(node);
 }
 
@@ -745,10 +761,15 @@ void
 }
 
 int
-(Block_not_block_visited)(ir_node *node) {
+(Block_not_block_visited)(const ir_node *node) {
        return _Block_not_block_visited(node);
 }
 
+int
+(Block_block_visited)(const ir_node *node) {
+       return _Block_block_visited(node);
+}
+
 ir_node *
 get_Block_graph_arr (ir_node *node, int pos) {
        assert(node->op == op_Block);
@@ -1080,7 +1101,7 @@ set_SymConst_type(ir_node *node, ir_type *tp) {
 }
 
 ident *
-get_SymConst_name(ir_node *node) {
+get_SymConst_name(const ir_node *node) {
        assert(node->op == op_SymConst && SYMCONST_HAS_ID(get_SymConst_kind(node)));
        return node->attr.symc.sym.ident_p;
 }
@@ -1093,7 +1114,7 @@ set_SymConst_name(ir_node *node, ident *name) {
 
 
 /* Only to access SymConst of kind symconst_addr_ent.  Else assertion: */
-ir_entity *get_SymConst_entity(ir_node *node) {
+ir_entity *get_SymConst_entity(const ir_node *node) {
        assert(node->op == op_SymConst && SYMCONST_HAS_ENT(get_SymConst_kind(node)));
        return node->attr.symc.sym.entity_p;
 }
@@ -1103,7 +1124,7 @@ void set_SymConst_entity(ir_node *node, ir_entity *ent) {
        node->attr.symc.sym.entity_p  = ent;
 }
 
-ir_enum_const *get_SymConst_enum(ir_node *node) {
+ir_enum_const *get_SymConst_enum(const ir_node *node) {
        assert(node->op == op_SymConst && SYMCONST_HAS_ENUM(get_SymConst_kind(node)));
        return node->attr.symc.sym.enum_p;
 }
@@ -1114,7 +1135,7 @@ void set_SymConst_enum(ir_node *node, ir_enum_const *ec) {
 }
 
 union symconst_symbol
-get_SymConst_symbol(ir_node *node) {
+get_SymConst_symbol(const ir_node *node) {
        assert(node->op == op_SymConst);
        return node->attr.symc.sym;
 }
@@ -1334,7 +1355,7 @@ void  set_CallBegin_call(ir_node *node, ir_node *call) {
 
 
 #define BINOP(OP)                                      \
-ir_node * get_##OP##_left(ir_node *node) {             \
+ir_node * get_##OP##_left(const ir_node *node) {       \
   assert(node->op == op_##OP);                         \
   return get_irn_n(node, node->op->op_index);          \
 }                                                      \
@@ -1342,7 +1363,7 @@ void set_##OP##_left(ir_node *node, ir_node *left) {   \
   assert(node->op == op_##OP);                         \
   set_irn_n(node, node->op->op_index, left);           \
 }                                                      \
-ir_node *get_##OP##_right(ir_node *node) {             \
+ir_node *get_##OP##_right(const ir_node *node) {       \
   assert(node->op == op_##OP);                         \
   return get_irn_n(node, node->op->op_index + 1);      \
 }                                                      \
@@ -1352,7 +1373,7 @@ void set_##OP##_right(ir_node *node, ir_node *right) { \
 }
 
 #define UNOP(OP)                                  \
-ir_node *get_##OP##_op(ir_node *node) {           \
+ir_node *get_##OP##_op(const ir_node *node) {     \
   assert(node->op == op_##OP);                    \
   return get_irn_n(node, node->op->op_index);     \
 }                                                 \
@@ -1471,7 +1492,7 @@ int
 }
 
 ir_node *
-get_unop_op(ir_node *node) {
+get_unop_op(const ir_node *node) {
        if (node->op->opar == oparity_unary)
                return get_irn_n(node, node->op->op_index);
 
@@ -1493,7 +1514,7 @@ int
 }
 
 ir_node *
-get_binop_left(ir_node *node) {
+get_binop_left(const ir_node *node) {
        assert(node->op->opar == oparity_binary);
        return get_irn_n(node, node->op->op_index);
 }
@@ -1505,7 +1526,7 @@ set_binop_left(ir_node *node, ir_node *left) {
 }
 
 ir_node *
-get_binop_right(ir_node *node) {
+get_binop_right(const ir_node *node) {
        assert(node->op->opar == oparity_binary);
        return get_irn_n(node, node->op->op_index + 1);
 }
@@ -1877,6 +1898,16 @@ set_Proj_pred(ir_node *node, ir_node *pred) {
        set_irn_n(node, 0, pred);
 }
 
+long get_VProj_proj(const ir_node *node)
+{
+       return node->attr.proj;
+}
+
+void set_VProj_proj(ir_node *node, long value)
+{
+       node->attr.proj = value;
+}
+
 long
 get_Proj_proj(const ir_node *node) {
        assert(is_Proj(node));
@@ -2278,7 +2309,7 @@ void set_Bound_upper(ir_node *bound, ir_node *upper) {
 }
 
 /* Return the operand of a Pin node. */
-ir_node *get_Pin_op(ir_node *pin) {
+ir_node *get_Pin_op(const ir_node *pin) {
        assert(pin->op == op_Pin);
        return get_irn_n(pin, 0);
 }
@@ -2470,6 +2501,16 @@ int
        return _is_Quot(node);
 }
 
+int
+(is_Add)(const ir_node *node) {
+       return _is_Add(node);
+}
+
+int
+(is_Sub)(const ir_node *node) {
+       return _is_Sub(node);
+}
+
 int
 (is_Start)(const ir_node *node) {
   return _is_Start(node);
@@ -2485,6 +2526,11 @@ int
        return _is_Const(node);
 }
 
+int
+(is_Conv)(const ir_node *node) {
+       return _is_Conv(node);
+}
+
 int
 (is_no_Block)(const ir_node *node) {
        return _is_no_Block(node);