X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.c;h=55108bbea22429309914366061558393f770a2bf;hb=52684e8ee70083c7ba5b25f51f33c6b5de78c7cf;hp=b59c13cd31829420978106a9d7c65d678c8b7fc9;hpb=946ac143432f37cbbadcd039b9c9892e21884ff5;p=libfirm diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index b59c13cd3..55108bbea 100644 --- a/ir/ir/irmode.c +++ b/ir/ir/irmode.c @@ -907,6 +907,25 @@ int mode_wrap_around(const ir_mode *mode) { return mode_is_int(mode); } +/* + * Returns non-zero if the cast from mode src to mode dst is a + * reinterpret cast (ie. only the bit pattern is reinterpreted, + * no conversion is done) + */ +int is_reinterpret_cast(const ir_mode *src, const ir_mode *dst) { + ir_mode_arithmetic ma; + + if (src == dst) + return 1; + if (get_mode_size_bits(src) != get_mode_size_bits(dst)) + return 0; + ma = get_mode_arithmetic(src); + if (ma != get_mode_arithmetic(dst)) + return 0; + + return ma == irma_twos_complement || ma == irma_ones_complement; +} + void finish_mode(void) { obstack_free(&modes, 0); DEL_ARR_F(mode_list);