This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Abusive (?) promotions to int


On Wednesday, September 24, 2003, at 03:15 AM, Andreas Schwab wrote:
I've been looking for macros to control integer promotions, especially for
temporary statements. Consider for instance the following code:


    char c;
    ...
    if (c + 4 > 10) ...

On my target, c gets zero_extended to int, then the addition and comparison
are performed in SImode, while it is not really necessary (could be done in
QImode as well and would save the zero_extend).

No, it cannot. You would get wrong behaviour if c >= 252 (assuming char
is unsigned 8 bit), because (char)(c + 4) < 10, but c + 4 > 10.

? But, while we can envision bad code gen, can't we also envision good sequences as well:


cond = c + 4 > 10;
cond = ((int)c + 4) > 10;
cond = ((int)c) > 6);
cond = ((char)c) > (char)6);

or is there something I'm missing? When the compiler is used on small machines, this type of optimization, if possible, is useful.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]