r323485 - [Driver] Add an -fexperimental-isel driver option to enable/disable GlobalISel.

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 30 02:45:24 PST 2018


Merged in r323745.

On Mon, Jan 29, 2018 at 10:46 PM, Amara Emerson <amara.emerson at 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 at 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 at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180130/d5fc979e/attachment-0001.html>


More information about the cfe-commits mailing list