[Beignet] [PATCH] GBE: workaround register allocation fail caused by custom loop unroll.
Zhigang Gong
zhigang.gong at linux.intel.com
Mon Nov 3 01:28:49 PST 2014
LGTM, pushed, thanks.
On Mon, Nov 03, 2014 at 03:52:25PM +0800, Ruiling Song wrote:
> As this issue only occurs under strict math, we disable custom
> loop unroll if strict math is enabled.
>
> Signed-off-by: Ruiling Song <ruiling.song at intel.com>
> ---
> backend/src/llvm/llvm_to_gen.cpp | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/backend/src/llvm/llvm_to_gen.cpp b/backend/src/llvm/llvm_to_gen.cpp
> index 0c7785b..33aec59 100644
> --- a/backend/src/llvm/llvm_to_gen.cpp
> +++ b/backend/src/llvm/llvm_to_gen.cpp
> @@ -107,7 +107,7 @@ namespace gbe
> FPM.doFinalization();
> }
>
> - void runModulePass(Module &mod, TargetLibraryInfo *libraryInfo, const DataLayout &DL, int optLevel)
> + void runModulePass(Module &mod, TargetLibraryInfo *libraryInfo, const DataLayout &DL, int optLevel, bool strictMath)
> {
> llvm::PassManager MPM;
>
> @@ -158,11 +158,16 @@ namespace gbe
> MPM.add(createGVNPass()); // Remove redundancies
> }
> #if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
> - MPM.add(createCustomLoopUnrollPass()); //1024, 32, 1024, 512)); //Unroll loops
> - MPM.add(createLoopUnrollPass()); //1024, 32, 1024, 512)); //Unroll loops
> - if(optLevel > 0) {
> - MPM.add(createSROAPass(/*RequiresDomTree*/ false));
> - MPM.add(createGVNPass()); // Remove redundancies
> + // FIXME Workaround: we find that CustomLoopUnroll may increase register pressure greatly,
> + // and it may even make som cl kernel cannot compile because of limited scratch memory for spill.
> + // As we observe this under strict math. So we disable CustomLoopUnroll if strict math is enabled.
> + if (!strictMath) {
> + MPM.add(createCustomLoopUnrollPass()); //1024, 32, 1024, 512)); //Unroll loops
> + MPM.add(createLoopUnrollPass()); //1024, 32, 1024, 512)); //Unroll loops
> + if(optLevel > 0) {
> + MPM.add(createSROAPass(/*RequiresDomTree*/ false));
> + MPM.add(createGVNPass()); // Remove redundancies
> + }
> }
> #endif
> MPM.add(createMemCpyOptPass()); // Remove memcpy / form memset
> @@ -250,7 +255,7 @@ namespace gbe
> OUTPUT_BITCODE(AFTER_LINK, mod);
>
> runFuntionPass(mod, libraryInfo, DL);
> - runModulePass(mod, libraryInfo, DL, optLevel);
> + runModulePass(mod, libraryInfo, DL, optLevel, strictMath);
> llvm::PassManager passes;
> #if LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 5
> passes.add(new DataLayoutPass(DL));
> --
> 1.7.10.4
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list