projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- Improved addressmode optimisation for conv nodes
[libfirm]
/
ir
/
be
/
ia32
/
ia32_nodes_attr.h
diff --git
a/ir/be/ia32/ia32_nodes_attr.h
b/ir/be/ia32/ia32_nodes_attr.h
index
e405d21
..
d9e36dc
100644
(file)
--- a/
ir/be/ia32/ia32_nodes_attr.h
+++ b/
ir/be/ia32/ia32_nodes_attr.h
@@
-1,3
+1,9
@@
+/**
+ * Type definitions for ia32 node attributes.
+ * @author Christian Wuerdig
+ * $Id$
+ */
+
#ifndef _IA32_NODES_ATTR_H_
#define _IA32_NODES_ATTR_H_
#ifndef _IA32_NODES_ATTR_H_
#define _IA32_NODES_ATTR_H_
@@
-82,17
+88,23
@@
typedef struct _ia32_attr_t {
unsigned op_flav:2; /**< flavour of an op (flavour_Div/Mod/DivMod) */
unsigned op_flav:2; /**< flavour of an op (flavour_Div/Mod/DivMod) */
- unsigned flags:4; /**< indicating if spillable
and/or rematerializeabl
e */
+ unsigned flags:4; /**< indicating if spillable
, rematerializeable, stack modifying and/or ignor
e */
unsigned is_commutative:1; /**< indicates whether op is commutative or not */
unsigned emit_cl:1; /**< indicates whether we must emit cl instead of ecx (needed for shifts) */
unsigned is_commutative:1; /**< indicates whether op is commutative or not */
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 got_reload:1; /**< set to 1 if node cosumed a reload */
+
+ unsigned n_res:6; /**< number of results produced by this node */
} data;
} data;
- struct obstack *am_offs; /**< offsets for AddrMode */
- ident *am_sc; /**< SymConst for AddrMode */
+ int *out_flags; /**< flags for each produced value */
+
+ int am_offs; /**< offsets for AddrMode */
+ ident *am_sc; /**< SymConst for AddrMode */
union {
tarval *tv; /**< tarval for immediate operations */
union {
tarval *tv; /**< tarval for immediate operations */
@@
-103,11
+115,15
@@
typedef struct _ia32_attr_t {
ir_mode *ls_mode; /**< the mode of the stored/loaded value */
ir_mode *res_mode; /**< the mode of the result */
ir_mode *ls_mode; /**< the mode of the stored/loaded value */
ir_mode *res_mode; /**< the mode of the result */
+ ir_mode *src_mode; /**< source mode for conversion */
+ ir_mode *tgt_mode; /**< target mode for conversion */
entity *frame_ent; /**< the frame entity attached to this node */
long pn_code; /**< projnum "types" (e.g. indicate compare operators and argument numbers) */
entity *frame_ent; /**< the frame entity attached to this node */
long pn_code; /**< projnum "types" (e.g. indicate compare operators and argument numbers) */
+ unsigned latency; /**< the latency of the instruction in clock cycles */
+
#ifndef NDEBUG
const char *orig_node; /**< holds the name of the original ir node for debugging purposes */
#endif /* NDEBUG */
#ifndef NDEBUG
const char *orig_node; /**< holds the name of the original ir node for debugging purposes */
#endif /* NDEBUG */
@@
-115,8
+131,10
@@
typedef struct _ia32_attr_t {
const ia32_register_req_t **in_req; /**< register requirements for arguments */
const ia32_register_req_t **out_req; /**< register requirements for results */
const ia32_register_req_t **in_req; /**< register requirements for arguments */
const ia32_register_req_t **out_req; /**< register requirements for results */
- const arch_register_t **slots; /**< register slots for assigned registers */
const arch_register_t *x87[3]; /**< register slots for x87 register */
const arch_register_t *x87[3]; /**< register slots for x87 register */
+
+ /* must be last, dynamic */
+ const arch_register_t *slots[1]; /**< register slots for assigned registers */
} ia32_attr_t;
#endif /* _IA32_NODES_ATTR_H_ */
} ia32_attr_t;
#endif /* _IA32_NODES_ATTR_H_ */