[Beignet] [PATCH OCL20 V2 1/4] Backend: Chang scan limit for GVN pass
Yang, Rong R
rong.r.yang at intel.com
Fri Apr 29 06:28:45 UTC 2016
This patch would be reverted when LLVM have another solution instead of break GVN silently.
The patchset LGTM, pushed, thanks.
> -----Original Message-----
> From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of
> Xiuli Pan
> Sent: Friday, April 29, 2016 11:25
> To: beignet at lists.freedesktop.org
> Cc: Pan, Xiuli <xiuli.pan at intel.com>
> Subject: [Beignet] [PATCH OCL20 V2 1/4] Backend: Chang scan limit for GVN
> pass
>
> From: Pan Xiuli <xiuli.pan at intel.com>
>
> Set memdep-block-scan-limit into llvm context to avoid unfinished GVN pass.
> V2: Revert remove praser llvm first
>
> Signed-off-by: Pan Xiuli <xiuli.pan at intel.com>
> ---
> backend/src/backend/program.cpp | 22 +++++++++++++++++++++-
> 1 file changed, 21 insertions(+), 1 deletion(-)
>
> diff --git a/backend/src/backend/program.cpp
> b/backend/src/backend/program.cpp index bbb8bd0..8eab1f6 100644
> --- a/backend/src/backend/program.cpp
> +++ b/backend/src/backend/program.cpp
> @@ -531,12 +531,21 @@ namespace gbe {
> // Arguments to pass to the clang frontend
> vector<const char *> args;
> bool bFastMath = false;
> + static bool ifsetllvm = false;
>
> for (auto &s : options) {
> args.push_back(s.c_str());
> }
>
> args.push_back("-cl-kernel-arg-info");
> + // The ParseCommandLineOptions used for mllvm args can not be used
> with multithread
> + // and GVN now have a 100 inst limit on block scan. Now only pass a
> bigger limit
> + // for each context only once, this can also fix multithread bug.
> + if(!ifsetllvm) {
> + args.push_back("-mllvm");
> + args.push_back("-memdep-block-scan-limit=200");
> + ifsetllvm = true;
> + }
> #ifdef GEN7_SAMPLER_CLAMP_BORDER_WORKAROUND
> args.push_back("-DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND");
> #endif
> @@ -605,7 +614,18 @@ if(sizeof(int*) == 8) {
> clang::LangOptions & lang_opts = Clang.getLangOpts();
> lang_opts.OpenCL = 1;
>
> - GBE_ASSERT(Clang.getFrontendOpts().LLVMArgs.empty() && "We do not
> have llvm args now");
> + //llvm flags need command line parsing to take effect
> + if (!Clang.getFrontendOpts().LLVMArgs.empty()) {
> + unsigned NumArgs = Clang.getFrontendOpts().LLVMArgs.size();
> + const char **Args = new const char*[NumArgs + 2];
> + Args[0] = "clang (LLVM option parsing)";
> + for (unsigned i = 0; i != NumArgs; ++i){
> + Args[i + 1] = Clang.getFrontendOpts().LLVMArgs[i].c_str();
> + }
> + Args[NumArgs + 1] = 0;
> + llvm::cl::ParseCommandLineOptions(NumArgs + 1, Args);
> + delete [] Args;
> + }
>
> // Create an action and make the compiler instance carry it out
> std::unique_ptr<clang::CodeGenAction> Act(new
> clang::EmitLLVMOnlyAction(llvm_ctx));
> --
> 2.5.0
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list