check if load/store can cosume the lea before consuming it
authorChristian Würdig <chriswue@ipd.info.uni-karlsruhe.de>
Fri, 21 Apr 2006 15:21:45 +0000 (15:21 +0000)
committerChristian Würdig <chriswue@ipd.info.uni-karlsruhe.de>
Fri, 21 Apr 2006 15:21:45 +0000 (15:21 +0000)
ir/be/ia32/ia32_optimize.c

index e5056f5..10dee2f 100644 (file)
@@ -1325,13 +1325,18 @@ static void optimize_lea(ir_node *irn, void *env) {
                        const ir_edge_t *edge, *ne;
                        ir_node *src;
 
                        const ir_edge_t *edge, *ne;
                        ir_node *src;
 
+                       if (get_irn_node_nr(irn) == 2324)
+                               __asm int 3
+
                        /* merge all Loads/Stores connected to this LEA with the LEA */
                        foreach_out_edge_safe(left, edge, ne) {
                                src = get_edge_src_irn(edge);
 
                                if (src && (is_ia32_Ld(src) || is_ia32_St(src) || is_ia32_Store8Bit(src))) {
                                        DBG((cg->mod, LEVEL_1, "\nmerging %+F into %+F\n", left, irn));
                        /* merge all Loads/Stores connected to this LEA with the LEA */
                        foreach_out_edge_safe(left, edge, ne) {
                                src = get_edge_src_irn(edge);
 
                                if (src && (is_ia32_Ld(src) || is_ia32_St(src) || is_ia32_Store8Bit(src))) {
                                        DBG((cg->mod, LEVEL_1, "\nmerging %+F into %+F\n", left, irn));
-                                       merge_loadstore_lea(src, left);
+                                       if (! is_ia32_got_lea(src))
+                                               merge_loadstore_lea(src, left);
+                                       set_ia32_got_lea(src);
                                }
                        }
                }
                                }
                        }
                }