* Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
*/
-
/**
* @file irnode_t.h
*
* @author Martin Trapp, Christian Schaefer
*/
-
# ifndef _IRNODE_T_H_
# define _IRNODE_T_H_
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-# include "irnode.h"
-# include "irop_t.h"
-# include "irgraph_t.h"
-# include "irflag_t.h"
-# include "firm_common_t.h"
-# include "irdom_t.h" /* For size of struct dom_info. */
-# include "dbginfo.h"
-# include "irloop.h"
-# include "array.h"
+#include "firm_config.h"
+#include "irnode.h"
+#include "irop_t.h"
+#include "irgraph_t.h"
+#include "irflag_t.h"
+#include "firm_common_t.h"
+#include "irdom_t.h" /* For size of struct dom_info. */
+#include "dbginfo.h"
+#include "irloop.h"
+#include "array.h"
#include "set.h"
#include "entity_t.h"
#include "type_t.h"
+
/** ir node attributes **/
/** Block attributes */
};
-/** Copies all attributes stored in the old node to the new node.
- Assumes both have the same opcode and sufficient size. */
-void
-copy_attrs(const ir_node *old_node, ir_node *new_node);
-
-
/** Returns the array with the ins. The content of the array may not be
changed. */
ir_node **get_irn_in (const ir_node *node);
except_attr get_irn_except_attr (ir_node *node);
/** @} */
+/*
+ * The amount of additional space for custom data to be allocated upon creating a new node.
+ */
+extern unsigned firm_add_node_size;
+
/*-------------------------------------------------------------------*/
/* These function are most used in libfirm. Give them as static */
/* functions so they can be inlined. */
return node->op;
}
+/** Copies all attributes stored in the old node to the new node.
+ Assumes both have the same opcode and sufficient size. */
+static INLINE void
+copy_node_attr(const ir_node *old_node, ir_node *new_node) {
+ ir_op *op = __get_irn_op(old_node);
+
+ /* must always exist */
+ op->copy_attr(old_node, new_node);
+}
+
/**
* Gets the opcode of a node.
* Intern version for libFirm.
* Intern version for libFirm.
*/
static INLINE ir_node *
-__get_irn_intra_n (ir_node *node, int n) {
+__get_irn_intra_n (const ir_node *node, int n) {
assert(node); assert(-1 <= n && n < __get_irn_intra_arity(node));
return (node->in[n + 1] = skip_Id(node->in[n + 1]));
* Intern version for libFirm.
*/
static INLINE ir_node*
-__get_irn_inter_n (ir_node *node, int n) {
+__get_irn_inter_n (const ir_node *node, int n) {
assert(node); assert(-1 <= n && n < __get_irn_inter_arity(node));
/* handle Filter and Block specially */
* If it is a block, the entry -1 is NULL.
* Intern version for libFirm.
*/
-extern ir_node *(*__get_irn_n)(ir_node *node, int n);
+extern ir_node *(*__get_irn_n)(const ir_node *node, int n);
/**
* Gets the mode of a node.