On Fri, May 3, 2013 at 2:48 PM, Richard Sandiford <rdsandif...@googlemail.com> wrote: > Kenneth Zadeck <zad...@naturalbridge.com> writes: >> There are several problems with just dropping a mode into the already >> existing mode field of an rtx constant. >> 1) There may be places where the a back end is testing equality to see >> if constants of different modes are in fact the same value. >> 2) Most of the places what build int constants use GEN_INT which does >> not take a mode, even though about 95% of those places have a mode right >> there and the rest just take a little work. There are constructor >> that do take a mode, but in the end they just throw the mode on the floor. >> 3) The canonical test to see if a CONST_DOUBLE contains an int or float >> is to test if the mode is VOIDmode. >> >> Any port that is converted to have TARGET_SUPPORTS_WIDE_INT has no more >> of problem (3). I admit that rooting out (1) is likely to be the worst >> of the problems. But we were careful to at least make this work move >> us in the correct direction. > > I agree with that, and FWIW, there are others. Two off the top of my head: > > 4) Many places use const0_rtx instead of CONST0_RTX (mode) (correctly, > according to current representation)
As it's easy from the context to get at a mode just drop const0_rtx and fix the fallout? (and complicate the CONST0_RTX macro to dispatch to const_int_rtx for integer modes) > 5) All const_ints in the .md files would need to be given a mode > (except for those places where const_int actually represents > a C++ constant, such as in attributes). > > I realise your list wasn't supposed to be exhaustive, and neither's mine :-) Now, do you think it is a good idea to assign integer constants a mode or not? Richard. > Richard