radv: run the EarlyCSEMemSSA LLVM pass
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 24 May 2018 20:55:54 +0000 (22:55 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 25 May 2018 12:24:14 +0000 (14:24 +0200)
It's recommended by the instruction combining pass, and
RadeonSI also runs it.

This pass used to segfault with one shader of F12017 in the
past, but it no longer crashes. Maybe the LLVM IR generated
by RADV has changed.

Polaris10:
Totals from affected shaders:
SGPRS: 441352 -> 441648 (0.07 %)
VGPRS: 310888 -> 300784 (-3.25 %)
Spilled SGPRs: 13576 -> 12983 (-4.37 %)
Code Size: 22560328 -> 22420544 (-0.62 %) bytes
Max Waves: 40755 -> 41366 (1.50 %)

Vega10:
Totals from affected shaders:
SGPRS: 442848 -> 442000 (-0.19 %)
VGPRS: 310396 -> 300460 (-3.20 %)
Spilled SGPRs: 13708 -> 12906 (-5.85 %)
Code Size: 22479428 -> 22336216 (-0.64 %) bytes
Max Waves: 45783 -> 46506 (1.58 %)

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_nir_to_llvm.c

index b174c027d959c2df35f86ece4c58f87b9c91ab42..a56f017e25c7e3869f7ec9f9f92c29bf4b90f476 100644 (file)
@@ -2982,6 +2982,8 @@ static void ac_llvm_finalize_module(struct radv_shader_context *ctx)
        LLVMAddLICMPass(passmgr);
        LLVMAddAggressiveDCEPass(passmgr);
        LLVMAddCFGSimplificationPass(passmgr);
+       /* This is recommended by the instruction combining pass. */
+       LLVMAddEarlyCSEMemSSAPass(passmgr);
        LLVMAddInstructionCombiningPass(passmgr);
 
        /* Run the pass */