X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.c;h=ccac04ad7f834434d39c9ec13d2fa7735101a486;hb=7d070c58e7bef1ed875fac066b57f29de449724b;hp=4103042e0f2fba1c3bdb3e4f0a70c1801b97b084;hpb=32ea6ea0320f551448bb66e534e3351977464d42;p=libfirm diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index 4103042e0..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 */ @@ -134,7 +113,7 @@ static void set_mode_values(ir_mode* mode) mode->null = get_tarval_null(mode); mode->one = get_tarval_one(mode); mode->minus_one = get_tarval_minus_one(mode); - if(get_mode_sort(mode) != irms_float_number) { + if (get_mode_sort(mode) != irms_float_number) { mode->all_one = get_tarval_all_one(mode); } else { mode->all_one = tarval_bad; @@ -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);