X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fldstopt.c;h=6dc6ba1bf4f1d72a988cbc1cc588ecf0d4b6c08a;hb=98c8808ee1d34300860bb78185558e1731a99368;hp=663ff5fd36795583eb7ef7661437d6f2396fc29b;hpb=63eda4e17ebee2a6ab7520d0559ddac0223607d7;p=libfirm diff --git a/ir/opt/ldstopt.c b/ir/opt/ldstopt.c index 663ff5fd3..6dc6ba1bf 100644 --- a/ir/opt/ldstopt.c +++ b/ir/opt/ldstopt.c @@ -339,7 +339,6 @@ static compound_graph_path *get_accessed_path(ir_node *ptr) { return rec_get_accessed_path(ptr, 0); } - /** * optimize a Load */ @@ -366,7 +365,7 @@ static int optimize_load(ir_node *load) if (get_irn_op(ptr) == op_Sel) { ir_node *mem = get_Sel_mem(ptr); - if (get_irn_op(mem) == op_Alloc) { + if (get_irn_op(skip_Proj(mem)) == op_Alloc) { /* ok, check the types */ entity *ent = get_Sel_entity(ptr); type *s_type = get_entity_type(ent); @@ -381,7 +380,8 @@ static int optimize_load(ir_node *load) } } } - else if (get_irn_op(ptr) == op_Alloc) { + else if ((get_irn_op(skip_Proj(ptr)) == op_Alloc) || + ((get_irn_op(ptr) == op_Cast) && (get_irn_op(skip_Proj(get_Cast_op(ptr))) == op_Alloc))) { /* simple case: a direct load after an Alloc. Firm Alloc throw * an exception in case of out-of-memory. So, there is no way for an * exception in this load.