Merged in r323745. On Mon, Jan 29, 2018 at 10:46 PM, Amara Emerson <amara.emer...@gmail.com> wrote:
> Hi Hans, > > Can we have this for the 6.0 branch? I'm also going to send a patch to add > the release notes clang and LLVM about this flag and GISel being enabled at > -O0. > > Cheers, > Amara > > On 25 January 2018 at 16:27, Amara Emerson via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: aemerson >> Date: Thu Jan 25 16:27:22 2018 >> New Revision: 323485 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=323485&view=rev >> Log: >> [Driver] Add an -fexperimental-isel driver option to enable/disable >> GlobalISel. >> >> Differential Revision: https://reviews.llvm.org/D42276 >> >> Added: >> cfe/trunk/test/Driver/global-isel.c >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td >> cfe/trunk/include/clang/Basic/DiagnosticGroups.td >> cfe/trunk/include/clang/Driver/Options.td >> cfe/trunk/lib/Driver/ToolChains/Clang.cpp >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >> Basic/DiagnosticDriverKinds.td?rev=323485&r1=323484&r2=323485&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Thu Jan 25 >> 16:27:22 2018 >> @@ -361,4 +361,12 @@ def warn_drv_fine_grained_bitfield_acces >> def note_drv_verify_prefix_spelling : Note< >> "-verify prefixes must start with a letter and contain only >> alphanumeric" >> " characters, hyphens, and underscores">; >> + >> +def warn_drv_experimental_isel_incomplete : Warning< >> + "-fexperimental-isel support for the '%0' architecture is incomplete">, >> + InGroup<ExperimentalISel>; >> + >> +def warn_drv_experimental_isel_incomplete_opt : Warning< >> + "-fexperimental-isel support is incomplete for this architecture at >> the current optimization level">, >> + InGroup<ExperimentalISel>; >> } >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >> Basic/DiagnosticGroups.td?rev=323485&r1=323484&r2=323485&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Thu Jan 25 >> 16:27:22 2018 >> @@ -985,3 +985,6 @@ def UnknownArgument : DiagGroup<"unknown >> // A warning group for warnings about code that clang accepts when >> // compiling OpenCL C/C++ but which is not compatible with the SPIR spec. >> def SpirCompat : DiagGroup<"spir-compat">; >> + >> +// Warning for the experimental-isel options. >> +def ExperimentalISel : DiagGroup<"experimental-isel">; >> >> Modified: cfe/trunk/include/clang/Driver/Options.td >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >> Driver/Options.td?rev=323485&r1=323484&r2=323485&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/include/clang/Driver/Options.td (original) >> +++ cfe/trunk/include/clang/Driver/Options.td Thu Jan 25 16:27:22 2018 >> @@ -1033,6 +1033,8 @@ def finline_functions : Flag<["-"], "fin >> def finline_hint_functions: Flag<["-"], "finline-hint-functions">, >> Group<f_clang_Group>, Flags<[CC1Option]>, >> HelpText<"Inline functions which are (explicitly or implicitly) marked >> inline">; >> def finline : Flag<["-"], "finline">, Group<clang_ignored_f_Group>; >> +def fexperimental_isel : Flag<["-"], "fexperimental-isel">, >> Group<f_clang_Group>, >> + HelpText<"Enables the experimental global instruction selector">; >> def fexperimental_new_pass_manager : Flag<["-"], >> "fexperimental-new-pass-manager">, >> Group<f_clang_Group>, Flags<[CC1Option]>, >> HelpText<"Enables an experimental new pass manager in LLVM.">; >> @@ -1244,6 +1246,8 @@ def fno_exceptions : Flag<["-"], "fno-ex >> def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, >> Flags<[CC1Option]>; >> def fno_inline_functions : Flag<["-"], "fno-inline-functions">, >> Group<f_clang_Group>, Flags<[CC1Option]>; >> def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, >> Flags<[CC1Option]>; >> +def fno_experimental_isel : Flag<["-"], "fno-experimental-isel">, >> Group<f_clang_Group>, >> + HelpText<"Disables the experimental global instruction selector">; >> def fno_experimental_new_pass_manager : Flag<["-"], >> "fno-experimental-new-pass-manager">, >> Group<f_clang_Group>, Flags<[CC1Option]>, >> HelpText<"Disables an experimental new pass manager in LLVM.">; >> >> Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Too >> lChains/Clang.cpp?rev=323485&r1=323484&r2=323485&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) >> +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Thu Jan 25 16:27:22 2018 >> @@ -4694,6 +4694,37 @@ void Clang::ConstructJob(Compilation &C, >> CmdArgs.push_back("-fwhole-program-vtables"); >> } >> >> + if (Arg *A = Args.getLastArg(options::OPT_fexperimental_isel, >> + options::OPT_fno_experimental_isel)) { >> + CmdArgs.push_back("-mllvm"); >> + if (A->getOption().matches(options::OPT_fexperimental_isel)) { >> + CmdArgs.push_back("-global-isel=1"); >> + >> + // GISel is on by default on AArch64 -O0, so don't bother adding >> + // the fallback remarks for it. Other combinations will add a >> warning of >> + // some kind. >> + bool IsArchSupported = Triple.getArch() == llvm::Triple::aarch64; >> + bool IsOptLevelSupported = false; >> + >> + Arg *A = Args.getLastArg(options::OPT_O_Group); >> + if (Triple.getArch() == llvm::Triple::aarch64) { >> + if (!A || A->getOption().matches(options::OPT_O0)) >> + IsOptLevelSupported = true; >> + } >> + if (!IsArchSupported || !IsOptLevelSupported) { >> + CmdArgs.push_back("-mllvm"); >> + CmdArgs.push_back("-global-isel-abort=2"); >> + >> + if (!IsArchSupported) >> + D.Diag(diag::warn_drv_experimental_isel_incomplete) << >> Triple.getArchName(); >> + else >> + D.Diag(diag::warn_drv_experimental_isel_incomplete_opt); >> + } >> + } else { >> + CmdArgs.push_back("-global-isel=0"); >> + } >> + } >> + >> // Finally add the compile command to the compilation. >> if (Args.hasArg(options::OPT__SLASH_fallback) && >> Output.getType() == types::TY_Object && >> >> Added: cfe/trunk/test/Driver/global-isel.c >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/gl >> obal-isel.c?rev=323485&view=auto >> ============================================================ >> ================== >> --- cfe/trunk/test/Driver/global-isel.c (added) >> +++ cfe/trunk/test/Driver/global-isel.c Thu Jan 25 16:27:22 2018 >> @@ -0,0 +1,24 @@ >> +// REQUIRES: x86-registered-target,aarch64-registered-target >> + >> +// RUN: %clang -fexperimental-isel -S -### %s 2>&1 | FileCheck >> --check-prefix=ENABLED %s >> +// RUN: %clang -fno-experimental-isel -S -### %s 2>&1 | FileCheck >> --check-prefix=DISABLED %s >> + >> +// RUN: %clang -target aarch64 -fexperimental-isel -S %s -### 2>&1 | >> FileCheck --check-prefix=ARM64-DEFAULT %s >> +// RUN: %clang -target aarch64 -fexperimental-isel -S -O0 %s -### 2>&1 | >> FileCheck --check-prefix=ARM64-O0 %s >> +// RUN: %clang -target aarch64 -fexperimental-isel -S -O2 %s -### 2>&1 | >> FileCheck --check-prefix=ARM64-O2 %s >> +// RUN: %clang -target aarch64 -fexperimental-isel >> -Wno-experimental-isel -S -O2 %s -### 2>&1 | FileCheck >> --check-prefix=ARM64-O2-NOWARN %s >> + >> +// RUN: %clang -target x86_64 -fexperimental-isel -S %s -### 2>&1 | >> FileCheck --check-prefix=X86_64 %s >> + >> +// ENABLED: "-mllvm" "-global-isel=1" >> +// DISABLED: "-mllvm" "-global-isel=0" >> + >> +// ARM64-DEFAULT-NOT: warning: -fexperimental-sel >> +// ARM64-DEFAULT-NOT: "-global-isel-abort=2" >> +// ARM64-O0-NOT: warning: -fexperimental-sel >> +// ARM64-O2: warning: -fexperimental-isel support is incomplete for this >> architecture at the current optimization level >> +// ARM64-O2: "-mllvm" "-global-isel-abort=2" >> +// ARM64-O2-NOWARN-NOT: warning: -fexperimental-isel >> + >> +// X86_64: -fexperimental-isel support for the 'x86_64' architecture is >> incomplete >> +// X86_64: "-mllvm" "-global-isel-abort=2" >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits