X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firmemory.c;h=9b3343aee9349c2d0ba2fc60be12ca325f8084ca;hb=af874fa6439abc37a74564bf32a623dee73e9e34;hp=03ed6cfe86cfeee3ab9db606f56b99f82538c121;hpb=974215da1a935f250766874d0f7a7ddfa34bc4ef;p=libfirm diff --git a/ir/ana/irmemory.c b/ir/ana/irmemory.c index 03ed6cfe8..9b3343aee 100644 --- a/ir/ana/irmemory.c +++ b/ir/ana/irmemory.c @@ -84,6 +84,25 @@ static ir_node *find_base_adr(ir_node *sel, ir_entity **pEnt) { return ptr; } /* find_base_adr */ +/** + * Check if the address can be decomposed into base PLUS offset. + */ +static int has_offset(ir_node *adr, int *offset) { + if (is_SymConst(adr)) { + *offset = 0; + return 1; + } + if (is_Sel(adr)) { + ir_entity *ent = get_Sel_entity(adr); + ir_type *owner = get_entity_owner(ent); + + if (get_type_state(owner) != layout_fixed) { + /* The layout is NOT fixed yet, symbolic evaluation needed */ + } + } + return 0; +} /* has_offset */ + /** * Two address expressions have the same base address, * check if there offsets are different. @@ -92,6 +111,10 @@ static ir_node *find_base_adr(ir_node *sel, ir_entity **pEnt) { * @param adr2 The second address. */ static ir_alias_relation different_offsets(ir_node *adr1, ir_node *adr2) { + int offset1, offset2; + if (has_offset(adr1, &offset1) && has_offset(adr2, &offset2)) { + /* */ + } return may_alias; } /* different_offsets */