X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.c;h=ccac04ad7f834434d39c9ec13d2fa7735101a486;hb=357886575cb0becb5bd9be376fde49b57edd5385;hp=4249a5a7d636620df5acf22f970fb64a9c446623;hpb=1a26f4853c07d1ecd68a097409dd602edfe29eff;p=libfirm diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index 4249a5a7d..ccac04ad7 100644 --- a/ir/ir/irmode.c +++ b/ir/ir/irmode.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -39,6 +39,7 @@ #include "irtools.h" #include "array.h" #include "error.h" +#include "pattern_dmp.h" /** Obstack to hold all modes. */ static struct obstack modes; @@ -89,8 +90,8 @@ static inline int modes_are_equal(const ir_mode *m, const ir_mode *n) */ static ir_mode *find_mode(const ir_mode *m) { - int i; - for (i = ARR_LEN(mode_list) - 1; i >= 0; --i) { + size_t i, n_modes; + for (i = 0, n_modes = ARR_LEN(mode_list); i < n_modes; ++i) { ir_mode *n = mode_list[i]; if (modes_are_equal(n, m)) return n; @@ -98,28 +99,6 @@ static ir_mode *find_mode(const ir_mode *m) return NULL; } -#ifdef FIRM_STATISTICS -/* return the mode index, only needed for statistics */ -int stat_find_mode_index(const ir_mode *m) -{ - int i; - for (i = ARR_LEN(mode_list) - 1; i >= 0; --i) { - ir_mode *n = mode_list[i]; - if (modes_are_equal(n, m)) - return i; - } - return -1; -} - -/* return the mode for a given index, only needed for statistics */ -ir_mode *stat_mode_for_index(int idx) -{ - if (0 <= idx && idx < ARR_LEN(mode_list)) - return mode_list[idx]; - return NULL; -} -#endif - /** * sets special values of modes */ @@ -346,8 +325,7 @@ ir_mode *new_ir_vector_mode(const char *name, ir_mode_sort sort, int bit_size, u } if (num_of_elem <= 1) { - assert(0 && "vector modes should have at least 2 elements"); - return NULL; + panic("vector modes should have at least 2 elements"); } /* sanity checks */ @@ -432,7 +410,7 @@ void (set_mode_link)(ir_mode *mode, void *l) _set_mode_link(mode, l); } -tarval *get_mode_min(ir_mode *mode) +ir_tarval *get_mode_min(ir_mode *mode) { assert(mode); assert(mode_is_data(mode)); @@ -440,7 +418,7 @@ tarval *get_mode_min(ir_mode *mode) return mode->min; } -tarval *get_mode_max(ir_mode *mode) +ir_tarval *get_mode_max(ir_mode *mode) { assert(mode); assert(mode_is_data(mode)); @@ -448,7 +426,7 @@ tarval *get_mode_max(ir_mode *mode) return mode->max; } -tarval *get_mode_null(ir_mode *mode) +ir_tarval *get_mode_null(ir_mode *mode) { assert(mode); assert(mode_is_datab(mode)); @@ -456,7 +434,7 @@ tarval *get_mode_null(ir_mode *mode) return mode->null; } -tarval *get_mode_one(ir_mode *mode) +ir_tarval *get_mode_one(ir_mode *mode) { assert(mode); assert(mode_is_datab(mode)); @@ -464,7 +442,7 @@ tarval *get_mode_one(ir_mode *mode) return mode->one; } -tarval *get_mode_minus_one(ir_mode *mode) +ir_tarval *get_mode_minus_one(ir_mode *mode) { assert(mode); assert(mode_is_data(mode)); @@ -472,14 +450,14 @@ tarval *get_mode_minus_one(ir_mode *mode) return mode->minus_one; } -tarval *get_mode_all_one(ir_mode *mode) +ir_tarval *get_mode_all_one(ir_mode *mode) { assert(mode); assert(mode_is_datab(mode)); return mode->all_one; } -tarval *get_mode_infinite(ir_mode *mode) +ir_tarval *get_mode_infinite(ir_mode *mode) { assert(mode); assert(mode_is_float(mode)); @@ -487,7 +465,7 @@ tarval *get_mode_infinite(ir_mode *mode) return get_tarval_plus_inf(mode); } -tarval *get_mode_NAN(ir_mode *mode) +ir_tarval *get_mode_NAN(ir_mode *mode) { assert(mode); assert(mode_is_float(mode)); @@ -960,6 +938,11 @@ int is_reinterpret_cast(const ir_mode *src, const ir_mode *dst) return ma == irma_twos_complement || ma == irma_ones_complement; } +ir_type *(get_type_for_mode) (const ir_mode *mode) +{ + return get_type_for_mode_(mode); +} + void finish_mode(void) { obstack_free(&modes, 0);