PowerPC : GCC2 optimises better than GCC4???
Steven Bosscher
stevenb.gcc@gmail.com
Mon Jan 4 11:19:00 GMT 2010
On Mon, Jan 4, 2010 at 12:02 PM, Andrew Haley <aph@redhat.com> wrote:
> On 01/04/2010 10:51 AM, Mark Colby wrote:
>> This sounds like a dumb question I know. However the following code
>> snippet results in many more machine instructions under 4.4.2 than under
>> 2.9.5 (I am running a cygwin->PowerPC cross):
>>
>> typedef unsigned int U32;
>> typedef union
>> {
>> U32 R;
>> struct
>> {
>> U32 BF1:2;
>> U32 :8;
>> U32 BF2:2;
>> U32 BF3:2;
>> U32 :18;
>> } B;
>> } TEST_t;
>> U32 testFunc(void)
>> {
>> TEST_t t;
>> t.R=0;
>> t.B.BF1=2;
>> t.B.BF2=3;
>> t.B.BF3=1;
>> return t.R;
>> }
>>
>> Output under 4.4.2 (powerpc-eabi-gcc-4-4-2 -O3 -S gcc-test.cpp -o
>> gcc-test-442.s):
>>
>> li 0,2
>> li 3,0
>> rlwimi 3,0,30,0,1
>> li 0,3
>> rlwimi 3,0,20,10,11
>> li 0,1
>> rlwimi 3,0,18,12,13
>> blr
>>
>> Output under 2.9.5 (powerpc-eabi-gcc-2-9-5 -O3 -S gcc-test.cpp -o
>> gcc-test-295.s):
>>
>> lis 3,0x8034
>> blr
>>
>> Is there any way to improve this behaviour? I have been using 2.9.5 very
>> successfully for years and am now looking at 4.4.2, but have many such
>> examples in my code (for clarity of commenting and maintainability).
>
> This is very strange. On x86_64, gcc 4.4.1 generates
>
> movl $7170, %eax
> ret
>
> This optimization is done by the first RTL cse pass. I can't understand
> why it's not being done for your target. I guess this will need a
> powerpc expert.
Known bug, see http://gcc.gnu.org/PR22141
I hope Jakub will finish this work for gcc 4.5.
Ciao!
Steven
More information about the Gcc
mailing list