+extern const arch_register_req_t *arch_no_register_req;
+
+/**
+ * Print information about a register requirement in human readable form
+ * @param F output stream/file
+ * @param req The requirements structure to format.
+ */
+void arch_dump_register_req(FILE *F, const arch_register_req_t *req,
+ const ir_node *node);
+
+void arch_dump_register_reqs(FILE *F, const ir_node *node);
+void arch_dump_reqs_and_registers(FILE *F, const ir_node *node);
+
+void arch_set_frame_offset(ir_node *irn, int bias);
+
+ir_entity *arch_get_frame_entity(const ir_node *irn);
+int arch_get_sp_bias(ir_node *irn);
+
+int arch_get_op_estimated_cost(const ir_node *irn);
+arch_inverse_t *arch_get_inverse(const ir_node *irn, int i,
+ arch_inverse_t *inverse,
+ struct obstack *obstack);
+int arch_possible_memory_operand(const ir_node *irn,
+ unsigned int i);
+void arch_perform_memory_operand(ir_node *irn, ir_node *spill,
+ unsigned int i);
+
+/**
+ * Get the register allocated for a value.
+ */
+const arch_register_t *arch_get_irn_register(const ir_node *irn);
+
+/**
+ * Assign register to a value
+ */
+void arch_set_irn_register(ir_node *irn, const arch_register_t *reg);
+
+/**
+ * Set the register for a certain output operand.
+ */
+void arch_set_irn_register_out(ir_node *irn, int pos, const arch_register_t *r);
+
+const arch_register_t *arch_get_irn_register_out(const ir_node *irn, int pos);
+const arch_register_t *arch_get_irn_register_in(const ir_node *irn, int pos);
+
+/**
+ * Get register constraints for an operand at position @p
+ */
+static inline const arch_register_req_t *arch_get_irn_register_req_in(
+ const ir_node *node, int pos)
+{
+ const backend_info_t *info = be_get_info(node);
+ if (info->in_reqs == NULL)
+ return arch_no_register_req;
+ return info->in_reqs[pos];
+}
+
+/**
+ * Get register constraint for a produced result (the @p pos result)
+ */
+static inline const arch_register_req_t *arch_get_irn_register_req_out(
+ const ir_node *node, int pos)