X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.c;h=b59c13cd31829420978106a9d7c65d678c8b7fc9;hb=b597c7fd473086ca6374b2abbdf129f595c156d0;hp=0a41285e50e34e61949c90f04e35349778992551;hpb=077eace885a7e700b3189f8d65acd04e689d4292;p=libfirm diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index 0a41285e5..b59c13cd3 100644 --- a/ir/ir/irmode.c +++ b/ir/ir/irmode.c @@ -536,11 +536,11 @@ int smaller_mode(const ir_mode *sm, const ir_mode *lm) { case irms_int_number: switch (get_mode_sort(lm)) { case irms_int_number: - if(get_mode_arithmetic(sm) != get_mode_arithmetic(lm)) + if (get_mode_arithmetic(sm) != get_mode_arithmetic(lm)) return 0; /* only two complement implemented */ - assert(get_mode_arithmetic(sm)==irma_twos_complement); + assert(get_mode_arithmetic(sm) == irma_twos_complement); /* integers are convertable if * - both have the same sign and lm is the larger one @@ -548,12 +548,12 @@ int smaller_mode(const ir_mode *sm, const ir_mode *lm) { * (one for the sign, one for the highest bit of sm) * - sm & lm are two_complement and lm has greater or equal number of bits */ - if(mode_is_signed(sm)) { - if(!mode_is_signed(lm)) + if (mode_is_signed(sm)) { + if (!mode_is_signed(lm)) return 0; return sm_bits <= lm_bits; } else { - if(mode_is_signed(lm)) { + if (mode_is_signed(lm)) { return sm_bits < lm_bits; } return sm_bits <= lm_bits; @@ -843,7 +843,11 @@ void init_mode(void) { ir_mode *find_unsigned_mode(const ir_mode *mode) { ir_mode n = *mode; - assert(mode->sort == irms_int_number); + /* allowed for reference mode */ + if (mode->sort == irms_reference) + n.sort = irms_int_number; + + assert(n.sort == irms_int_number); n.sign = 0; return find_mode(&n); }