From d57fa1071acdc33b6fd58a8ff2159f8a99347500 Mon Sep 17 00:00:00 2001 From: Matthias Heil Date: Tue, 2 Dec 2003 14:45:29 +0000 Subject: [PATCH] Goetz added int is_const_irn_expression(ir_node *n) [r2165] --- ir/tr/entity.c | 32 +++++++++++++++++++++++++++++++- ir/tr/entity.h | 3 +++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/ir/tr/entity.c b/ir/tr/entity.c index 7d8028724..f1923f33d 100644 --- a/ir/tr/entity.c +++ b/ir/tr/entity.c @@ -438,6 +438,31 @@ set_atomic_ent_value(entity *ent, ir_node *val) { 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; @@ -450,7 +475,12 @@ ir_node *copy_const_value(ir_node *n) { 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: diff --git a/ir/tr/entity.h b/ir/tr/entity.h index 09204c2d7..39bb81977 100644 --- a/ir/tr/entity.h +++ b/ir/tr/entity.h @@ -322,6 +322,9 @@ void set_entity_peculiarity (entity *ent, peculiarity pec); 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 -- 2.20.1