This is the mail archive of the gcc-patches@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: PATCH: PR target/40838: gcc shouldn't assume that the stack is aligned


2009/8/8 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>:
>> > From gcc 3.4:
>> >
>> > ?/* Validate -mpreferred-stack-boundary= value, or provide default.
>> > ? ? The default of 128 bits is for Pentium III's SSE __m128, but we
>> > ? ? don't want additional code to keep the stack aligned when
>> > ? ? optimizing for code size. ?*/
>> > ?ix86_preferred_stack_boundary = (optimize_size
>> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TARGET_64BIT ? 128 : 32
>> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : 128);
>> >
>> > If you compile code with -Os, you will get 4 byte stack alignment.
>> > Just step back, we changed stack alignment from 4 byte to 16byte
>> > for SSE since we couldn't realign stack at the time. Now we can
>> > realign the stack very efficiently. I think we should do it for SSE
>> > to support the existing Linux binaries which have 4 byte stack
>> > alignment. If it helps, I can compare -m32 -O3 -msse2 -mfp-math=sse
>> > results with SPEC CPU 2006, before and after my patch.
>> >
>>
>> Here are the differences of -m32 -O3 -msse2 -mfpmath=sse -ffast-math
>> -funroll-loops
>> before and after my patch:
>>
>> 400.perlbench ? ? ? ? ? ? ? ? ? ?-0.384615%
>> 401.bzip2 ? ? ? ? ? ? ? ? ? ? ? ?0%
>> 403.gcc ? ? ? ? ? ? ? ? ? ? ? ? ?-0.362319%
>> 429.mcf ? ? ? ? ? ? ? ? ? ? ? ? ?-0.813008%
>> 445.gobmk ? ? ? ? ? ? ? ? ? ? ? ?0.921659%
>> 456.hmmer ? ? ? ? ? ? ? ? ? ? ? ?0.549451%
>> 458.sjeng ? ? ? ? ? ? ? ? ? ? ? ?-0.438596%
>> 462.libquantum ? ? ? ? ? ? ? ? ? 0%
>> 464.h264ref ? ? ? ? ? ? ? ? ? ? ?0%
>> 471.omnetpp ? ? ? ? ? ? ? ? ? ? ?-0.478469%
>> 473.astar ? ? ? ? ? ? ? ? ? ? ? ?-0.645161%
>> 483.xalancbmk ? ? ? ? ? ? ? ? ? ?-0.727273%
>> SPECint(R)_base2006 ? ? ? ? ? ? ? ? ? ? ?-0.411523%
>> 410.bwaves ? ? ? ? ? ? ? ? ? ? ? -0.406504%
>> 416.gamess ? ? ? ? ? ? ? ? ? ? ? 0%
>> 433.milc ? ? ? ? ? ? ? ? ? ? ? ? -1.36986%
>> 434.zeusmp ? ? ? ? ? ? ? ? ? ? ? -0.44843%
>> 435.gromacs ? ? ? ? ? ? ? ? ? ? ?0%
>> 436.cactusADM ? ? ? ? ? ? ? ? ? ?0%
>> 437.leslie3d ? ? ? ? ? ? ? ? ? ? -0.888889%
>> 444.namd ? ? ? ? ? ? ? ? ? ? ? ? 1.20482%
>> 447.dealII ? ? ? ? ? ? ? ? ? ? ? -0.350877%
>> 450.soplex ? ? ? ? ? ? ? ? ? ? ? -0.31746%
>> 453.povray ? ? ? ? ? ? ? ? ? ? ? 0.458716%
>> 454.calculix ? ? ? ? ? ? ? ? ? ? 0%
>> 459.GemsFDTD ? ? ? ? ? ? ? ? ? ? 0%
>> 465.tonto ? ? ? ? ? ? ? ? ? ? ? ?0%
>> 470.lbm ? ? ? ? ? ? ? ? ? ? ? ? ?0%
>> 481.wrf ? ? ? ? ? ? ? ? ? ? ? ? ?0.480769%
>> 482.sphinx3 ? ? ? ? ? ? ? ? ? ? ?0.940439%
>> SPECfp(R)_base2006 ? ? ? ? ? ? ? ? ? ? ? 0%
>>
>> I think we should align stack if SSE variables are put on stack.
>>
>> --
>> H.J.
>
> Your patch is buggy, it aligns the stack in functions with vector types
> but doesn't align if the autovectorizer creates 16-bit SSE instructions
> (that is even more dangerous than vector types because it may make crashes
> at random places). You must put that test somewhere else.
>

Please show the assembly output with my patch applied.

Thanks.


-- 
H.J.


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