[Mesa-dev] [PATCH 2/8] radeonsi: do EarlyCSEMemSSA LLVM pass

Marek Olšák maraeo at gmail.com
Tue Jun 13 22:42:24 UTC 2017


On Wed, Jun 14, 2017 at 12:12 AM, Miklós Máté <mtmkls at gmail.com> wrote:
> On 05/06/17 18:50, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> so that LLVM IR looks like CSE has been run on it. It's also recommended
>> by the instruction combining pass.
>>
>> This also fixes:
>> - GL45-CTS.arrays_of_arrays_gl.InteractionFunctionCalls2 (crash)
>> - piglit/spec/arb_shader_ballot/execution/fs-readFirstInvocation-uint-loop
>> (fail)
>>
>> The code size decrease is positive, the register usage isn't. There is
>> a decrease in VGPR spilling for Tomb Raider, but increase in DiRT Showdown
>> and GRID Autosport.
>>
>> EarlyCSEMemSSA has a -0.01% change in code size compared EarlyCSE.
>
> This needs LLVM 4.0.0, whereas radeonsi officially only needs 3.9.0.

It was fixed in master.

Marek

>
> MM
>
>>
>> SGPRS: 1935420 -> 1938076 (0.14 %)
>> VGPRS: 1645504 -> 1645988 (0.03 %)
>> Spilled SGPRs: 2493 -> 2651 (6.34 %)
>> Spilled VGPRs: 107 -> 115 (7.48 %)
>> Private memory VGPRs: 1332 -> 1332 (0.00 %)
>> Scratch size: 1512 -> 1516 (0.26 %) dwords per thread
>> Code Size: 61981592 -> 61890012 (-0.15 %) bytes
>> Max Waves: 371847 -> 371798 (-0.01 %)
>> ---
>>   src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
>> b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
>> index 1f8e913..802e2b9 100644
>> --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
>> +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
>> @@ -1444,20 +1444,22 @@ void si_llvm_optimize_module(struct
>> si_shader_context *ctx)
>>         LLVMAddAlwaysInlinerPass(gallivm->passmgr);
>>         /* This pass should eliminate all the load and store instructions
>> */
>>         LLVMAddPromoteMemoryToRegisterPass(gallivm->passmgr);
>>         /* Add some optimization passes */
>>         LLVMAddScalarReplAggregatesPass(gallivm->passmgr);
>>         LLVMAddLICMPass(gallivm->passmgr);
>>         LLVMAddAggressiveDCEPass(gallivm->passmgr);
>>         LLVMAddCFGSimplificationPass(gallivm->passmgr);
>> +       /* This is recommended by the instruction combining pass. */
>> +       LLVMAddEarlyCSEMemSSAPass(gallivm->passmgr);
>>         LLVMAddInstructionCombiningPass(gallivm->passmgr);
>>         /* Run the pass */
>>         LLVMRunPassManager(gallivm->passmgr, ctx->gallivm.module);
>>         LLVMDisposeBuilder(gallivm->builder);
>>         LLVMDisposePassManager(gallivm->passmgr);
>>         gallivm_dispose_target_library_info(target_library_info);
>>   }
>>
>
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list