From 91439df71dc66cc1fde31eff1943879ac50dde16 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Fri, 21 Apr 2006 15:21:21 +0000 Subject: [PATCH] added new flag to indicate if node already consumed a lea --- ir/be/ia32/ia32_new_nodes.c | 26 +++++++++++++++++++++++++- ir/be/ia32/ia32_new_nodes.h | 15 +++++++++++++++ ir/be/ia32/ia32_nodes_attr.h | 4 +++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/ir/be/ia32/ia32_new_nodes.c b/ir/be/ia32/ia32_new_nodes.c index 90196e7be..6b0e630f2 100644 --- a/ir/be/ia32/ia32_new_nodes.c +++ b/ir/be/ia32/ia32_new_nodes.c @@ -718,13 +718,37 @@ void clear_ia32_emit_cl(ir_node *node) { } /** - * Checks if node is commutative. + * Checks if node needs %cl. */ int is_ia32_emit_cl(const ir_node *node) { ia32_attr_t *attr = get_ia32_attr(node); return attr->data.emit_cl; } +/** + * Sets node got_lea. + */ +void set_ia32_got_lea(ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + attr->data.got_lea = 1; +} + +/** + * Clears node got_lea. + */ +void clear_ia32_got_lea(ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + attr->data.got_lea = 0; +} + +/** + * Checks if node got lea. + */ +int is_ia32_got_lea(const ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + return attr->data.got_lea; +} + /** * Gets the mode of the stored/loaded value (only set for Store/Load) */ diff --git a/ir/be/ia32/ia32_new_nodes.h b/ir/be/ia32/ia32_new_nodes.h index bfe91e7a5..76fd5bbcf 100644 --- a/ir/be/ia32/ia32_new_nodes.h +++ b/ir/be/ia32/ia32_new_nodes.h @@ -201,6 +201,21 @@ void clear_ia32_emit_cl(ir_node *node); */ int is_ia32_emit_cl(const ir_node *node); +/** + * Sets node got_lea. + */ +void set_ia32_got_lea(ir_node *node); + +/** + * Clears node got_lea. + */ +void clear_ia32_got_lea(ir_node *node); + +/** + * Checks if node got lea. + */ +int is_ia32_got_lea(const ir_node *node); + /** * Gets the mode of the stored/loaded value (only set for Store/Load) */ diff --git a/ir/be/ia32/ia32_nodes_attr.h b/ir/be/ia32/ia32_nodes_attr.h index 2b89bd229..6e8c95904 100644 --- a/ir/be/ia32/ia32_nodes_attr.h +++ b/ir/be/ia32/ia32_nodes_attr.h @@ -88,7 +88,9 @@ typedef struct _ia32_attr_t { unsigned emit_cl:1; /**< indicates whether we must emit cl instead of ecx (needed for shifts) */ - unsigned n_res:8; /**< number of results produced by this node */ + unsigned got_lea:1; /**< indicates whether or not this node already consumed a LEA */ + + unsigned n_res:7; /**< number of results produced by this node */ } data; struct obstack *am_offs; /**< offsets for AddrMode */ -- 2.20.1