- BugFix: fixed effect of r22470: Immediate is always the RIGHT operand
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sat, 4 Oct 2008 23:06:40 +0000 (23:06 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sat, 4 Oct 2008 23:06:40 +0000 (23:06 +0000)
  (where this is specified?), so do NOT overwrite it (analog to
  turn_back_am())

[r22485]

ir/be/ia32/ia32_finish.c

index a62dd19..02afd1c 100644 (file)
@@ -479,8 +479,11 @@ static void fix_am_source(ir_node *irn, void *env)
                        arch_set_irn_register(cg->arch_env, load_res, out_reg);
 
                        /* set the new input operand */
-                       set_irn_n(irn, n_ia32_binary_right, load_res);
-                       if(get_irn_mode(irn) == mode_T) {
+                       if (is_ia32_Immediate(get_irn_n(irn, n_ia32_binary_right)))
+                               set_irn_n(irn, n_ia32_binary_left, load_res);
+                       else
+                               set_irn_n(irn, n_ia32_binary_right, load_res);
+                       if (get_irn_mode(irn) == mode_T) {
                                const ir_edge_t *edge, *next;
                                foreach_out_edge_safe(irn, edge, next) {
                                        ir_node *node = get_edge_src_irn(edge);