X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Ftr%2Ftype.c;h=eb376985a9e6a60a4a78d1c1cb2ade775d7f6db4;hb=db30faa048d1f60904d003f7bedf0f3358ff8903;hp=2cf64992a792fb97838bdb62480307126c130c31;hpb=f8cc15664f571aa7ef89d6f6bc8d5bd2b8ca7d53;p=libfirm diff --git a/ir/tr/type.c b/ir/tr/type.c index 2cf64992a..eb376985a 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -86,16 +86,13 @@ void ir_init_type(void) firm_none_type = new_type(tpop_none, mode_BAD, NULL); set_type_size_bytes(firm_none_type, 0); set_type_state (firm_none_type, layout_fixed); - remove_irp_type(firm_none_type); firm_code_type = new_type(tpop_code, mode_ANY, NULL); set_type_state(firm_code_type, layout_fixed); - remove_irp_type(firm_code_type); firm_unknown_type = new_type(tpop_unknown, mode_ANY, NULL); set_type_size_bytes(firm_unknown_type, 0); set_type_state (firm_unknown_type, layout_fixed); - remove_irp_type(firm_unknown_type); } void ir_finish_type(void) @@ -114,7 +111,6 @@ void ir_finish_type(void) } } -/** the global type visited flag */ ir_visited_t firm_type_visited; void (set_master_type_visited)(ir_visited_t val) @@ -241,7 +237,6 @@ void set_type_mode(ir_type *tp, ir_mode *mode) assert(0 && "setting a mode is NOT allowed for this type"); } -/* Outputs a unique number for this node */ long get_type_nr(const ir_type *tp) { assert(tp); @@ -430,7 +425,6 @@ int (is_type)(const void *thing) return _is_type(thing); } -/* Checks whether two types are structural equal.*/ int equal_type(ir_type *typ1, ir_type *typ2) { ir_entity **m; @@ -1484,7 +1478,6 @@ void free_array_attrs(ir_type *array) free(array->attr.aa.order); } -/* manipulate private fields of array ir_type */ size_t get_array_n_dimensions(const ir_type *array) { assert(array->type_op == type_array); @@ -1960,9 +1953,6 @@ ir_type *new_type_frame(void) res->flags |= tf_frame_type; - /* Remove type from type list. Must be treated differently than other types. */ - remove_irp_type(res); - /* It is not possible to derive from the frame type. Set the final flag. */ set_class_final(res, 1); @@ -2037,7 +2027,6 @@ ir_entity *frame_alloc_area(ir_type *frame_type, int size, unsigned alignment, ir_type *tp; ident *name; char buf[32]; - unsigned frame_align; int offset, frame_size; static unsigned area_cnt = 0; static ir_type *a_byte = NULL; @@ -2053,10 +2042,6 @@ ir_entity *frame_alloc_area(ir_type *frame_type, int size, unsigned alignment, snprintf(buf, sizeof(buf), "area%u", area_cnt++); name = new_id_from_str(buf); - /* align the size */ - frame_align = get_type_alignment_bytes(frame_type); - size = (size + frame_align - 1) & ~(frame_align - 1); - tp = new_type_array(1, a_byte); set_array_bounds_int(tp, 0, 0, size); set_type_alignment_bytes(tp, alignment); @@ -2065,15 +2050,17 @@ ir_entity *frame_alloc_area(ir_type *frame_type, int size, unsigned alignment, frame_size = get_type_size_bytes(frame_type); if (at_start) { size_t i, n; + unsigned frame_align = get_type_alignment_bytes(frame_type); + unsigned delta = (size + frame_align - 1) & ~(frame_align - 1); /* fix all offsets so far */ for (i = 0, n = get_class_n_members(frame_type); i < n; ++i) { ir_entity *ent = get_class_member(frame_type, i); - set_entity_offset(ent, get_entity_offset(ent) + size); + set_entity_offset(ent, get_entity_offset(ent) + delta); } /* calculate offset and new type size */ offset = 0; - frame_size += size; + frame_size += delta; /* increase size to match alignment... */ if (alignment > frame_align) {