assert (get_type_mode(tp) == get_irn_mode(node));
}
+ if ((get_irn_node_nr(node) == 259216) && (tp == unknown_type))
+ assert(0);
+
+
node->attr.con.tp = tp;
}
node->attr.i.sym.entity_p = ent;
}
-
union symconst_symbol
get_SymConst_symbol (ir_node *node) {
assert (node->op == op_SymConst);
node->attr.i.sym = sym;
}
+type *
+get_SymConst_value_type (ir_node *node) {
+ assert (node->op == op_SymConst);
+ return node->attr.i.tp = skip_tid(node->attr.i.tp);
+}
+
+void
+set_SymConst_value_type (ir_node *node, type *tp) {
+ assert (node->op == op_SymConst);
+ node->attr.i.tp = tp;
+}
+
ir_node *
get_Sel_mem (ir_node *node) {
assert (node->op == op_Sel);
#endif
#ifdef __cplusplus
- extern "C" {
-
+extern "C" {
#endif
/**
*
*/
-/** This works for all except Block. To express the difference to
- * access routines that work for all nodes we use infix "nodes" and do not
- * name this function get_irn_block. */
+/** Return the block the node belongs to.
+ *
+ * This works for all except Block. It can return Blocks or the Bad node.
+ *
+ * To express the difference to access routines that work for all
+ * nodes we use infix "nodes" and do not name this function
+ * get_irn_block. */
ir_node *get_nodes_block (ir_node *node);
void set_nodes_block (ir_node *node, ir_node *block);
void set_SymConst_symbol (ir_node *node,
union symconst_symbol sym);
+/** Access the type of the value represented by the SymConst.
+ *
+ * Example: primitive type int for SymConst size. */
+type *get_SymConst_value_type (ir_node *node);
+void set_SymConst_value_type (ir_node *node, type *tp);
+
ir_node *get_Sel_mem (ir_node *node);
void set_Sel_mem (ir_node *node, ir_node *mem);
ir_node *get_Sel_ptr (ir_node *node); /* ptr to the object to select from */
/** Return true if parameter is a memory operation.
*
- * A memory operation is an operation that directly changes the
+ * A memory operation is an operation that changes the
* memory. I.e., a Load or a Store operation.
*/
int is_memop(ir_node *node);