an old floating point benchmark
[libfirm] / ir / be / bearch.h
index 8fec55d..6da6382 100644 (file)
@@ -322,6 +322,15 @@ struct _arch_irn_ops_if_t {
    */
   int (*possible_memory_operand)(const void *self, const ir_node *irn, unsigned int i);
 
+  /**
+   * Ask the backend to assimilate @p reload of operand @p i into @p irn.
+   *
+   * @param self   The this pointer.
+   * @param irn    The node.
+   * @param reload The reload.
+   * @param i      The position of the reload.
+   */
+  void (*perform_memory_operand)(const void *self, ir_node *irn, ir_node *reload, unsigned int i);
 };
 
 /**
@@ -335,7 +344,10 @@ extern void arch_set_frame_offset(const arch_env_t *env, ir_node *irn, int bias)
 
 extern entity *arch_get_frame_entity(const arch_env_t *env, ir_node *irn);
 
+extern int arch_get_op_estimated_cost(const arch_env_t *env, const ir_node *irn);
 extern arch_inverse_t *arch_get_inverse(const arch_env_t *env, const ir_node *irn, int i, arch_inverse_t *inverse, struct obstack *obstack);
+extern int arch_possible_memory_operand(const arch_env_t *env, const ir_node *irn, unsigned int i);
+extern void arch_perform_memory_operand(const arch_env_t *env, ir_node *irn, ir_node *reload, unsigned int i);
 
 /**
  * Get the register requirements for a node.
@@ -386,6 +398,15 @@ extern int arch_get_allocatable_regs(const arch_env_t *env, const ir_node *irn,
  */
 extern void arch_put_non_ignore_regs(const arch_env_t *env, const arch_register_class_t *cls, bitset_t *bs);
 
+/**
+ * Return the number of registers in a register class which should not be
+ * ignored by the register allocator.
+ * @param env The architecture environment.
+ * @param cls The register class to consider
+ * @return       The number of non-ignore registers in the register class
+ */
+extern int arch_count_non_ignore_regs(const arch_env_t *env, const arch_register_class_t *cls);
+
 /**
  * Check, if a register is assignable to an operand of a node.
  * @param env The architecture environment.
@@ -693,4 +714,5 @@ extern arch_env_t *arch_env_push_irn_handler(arch_env_t *env, const arch_irn_han
  */
 extern const arch_irn_handler_t *arch_env_pop_irn_handler(arch_env_t *env);
 
+
 #endif /* _FIRM_BEARCH_H */