This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: A question about integer promotion in GCC
Joseph S. Myers wrote:
On Thu, 2 Sep 2004, Jie Zhang wrote:
According to this, shouldn't it be:
return (int)x << 8 | (int)x >> 8;
The current function of tree dumps is for debugging the compiler, not as a
representation of source. Various optimisations are performed on the
trees generated, both in the process of generating them to avoid
generating unnecessary garbage, and as part of fold(), before they get to
the first tree dumps. (In this case, a right shift of a short can be
represented directly on the short, whereas a left shift of a short
cannot.)
I think optimizing "(int)x >> 8" to "(int)(x >> 8)" is not good, at least for RISCs, like MIPS. Now gcc (3.4.0) generates the following assembly with option -O0:
lhu $2,0($fp)
sll $2,$2,8
lhu $3,0($fp)
srl $3,$3,8
andi $3,$3,0xffff
or $2,$2,$3
IMO, the "andi" instruction is useless. I suspect it's due to this optimization. Without knowing it this assembly is confusing.
There is a mood towards doing less such optimisations at parse time (and
I like this idea. It will make both the structure of GCC and the -O0 assembly output more clear.
regards
--
Jie