+ set_reg_value(in);
+ }
+}
+
+void be_peephole_before_exchange(const ir_node *old_node, ir_node *new_node)
+{
+ const arch_register_t *reg;
+ const arch_register_class_t *cls;
+ unsigned reg_idx;
+ unsigned cls_idx;
+
+ DBG((dbg, LEVEL_1, "About to exchange %+F with %+F\n", old_node, new_node));
+
+ if(old_node == current_node) {
+ if(is_Proj(new_node)) {
+ current_node = get_Proj_pred(new_node);
+ } else {
+ current_node = new_node;
+ }
+ }
+
+ if(!mode_is_data(get_irn_mode(old_node)))
+ return;
+
+ reg = arch_get_irn_register(arch_env, old_node);
+ if(reg == NULL) {
+ panic("No register assigned at %+F\n", old_node);
+ }
+ cls = arch_register_get_class(reg);
+ reg_idx = arch_register_get_index(reg);
+ cls_idx = arch_register_class_index(cls);
+
+ if(register_values[cls_idx][reg_idx] == old_node) {
+ register_values[cls_idx][reg_idx] = new_node;