* Some flags describing a node in more detail.
*/
typedef enum _arch_irn_flags_t {
- arch_irn_flags_dont_spill = 1, /**< This must not be spilled. */
- arch_irn_flags_rematerializable = 2, /**< This should be replicated instead of spilled/reloaded. */
- arch_irn_flags_ignore = 4, /**< Do not consider the node during register allocation. */
+ arch_irn_flags_none = 0, /**< Node flags. */
+ arch_irn_flags_dont_spill = 1, /**< This must not be spilled. */
+ arch_irn_flags_rematerializable = 2, /**< This should be replicated instead of spilled/reloaded. */
+ arch_irn_flags_ignore = 4, /**< Do not consider the node during register allocation. */
} arch_irn_flags_t;
struct _arch_irn_ops_if_t {
*/
arch_irn_flags_t (*get_flags)(const void *self, const ir_node *irn);
+ /**
+ * Set a bias for the stack pointer.
+ * If the node in question uses the stack pointer for indexing, it must
+ * consider the value of <code>bias</code> additionally.
+ * @param self The this pointer.
+ * @param irn The node in question.
+ * @param bias The bias.
+ */
+ void (*set_stack_bias)(const void *self, ir_node *irn, int bias);
};
/**
const arch_irn_ops_if_t *impl;
};
+extern void
+arch_set_stack_bias(const arch_env_t *env, ir_node *irn, int bias);
+
/**
* Get the register requirements for a node.
* @param env The architecture environment.
*/
ir_node *(*lower_reload)(void *self, ir_node *reload);
- /**
- * Called in lowering (e.g. alloca lowering) to set the
- * correct stack register.
- * @param self The code generator
- * @return The stack register for the current irg
- */
- const arch_register_t *(*get_stack_register)(void *self);
-
/**
* Called after everything happened.
* The code generator must also be de-allocated here.