ent->value = val;
}
+/* Returns true if the the node is representable as code on
+ * const_code_irg. */
+int is_irn_const_expression(ir_node *n) {
+ ir_node *pred;
+ ir_mode *m;
+
+ m = get_irn_mode(n);
+ switch(get_irn_opcode(n)) {
+ case iro_Const:
+ case iro_SymConst:
+ case iro_Unknown:
+ return true; break;
+ case iro_Add:
+ if (is_irn_const_expression(get_Add_left(n)))
+ return is_irn_const_expression(get_Add_right(n));
+ case iro_Conv:
+ case iro_Cast:
+ return is_irn_const_expression(get_irn_n(n, 0));
+ default:
+ return false;
+ break;
+ }
+ return false;
+}
+
ir_node *copy_const_value(ir_node *n) {
ir_node *nn;
case iro_SymConst:
nn = new_SymConst(get_SymConst_type_or_id(n), get_SymConst_kind(n)); break;
case iro_Add:
- nn = new_Add(copy_const_value(get_Add_left(n)), copy_const_value(get_Add_right(n)), m); break;
+ nn = new_Add(copy_const_value(get_Add_left(n)),
+ copy_const_value(get_Add_right(n)), m); break;
+ case iro_Cast:
+ nn = new_Cast(copy_const_value(get_Cast_op(n)), get_Cast_type(n)); break;
+ case iro_Conv:
+ nn = new_Conv(copy_const_value(get_Conv_op(n)), m); break;
case iro_Unknown:
nn = new_Unknown(); break;
default:
const char *get_peculiarity_name(peculiarity var);
/* -- Representation of constant values of entites -- */
+/** Returns true if the the node is representable as code on
+ * const_code_irg. */
+int is_irn_const_expression(ir_node *n);
/* Set current_ir_graph to get_const_code_irg() to generate a constant
expression. */
/* Copies a firm subgraph that complies to the restrictions for