Skip to content

Commit

Permalink
Add a new -fglobal-isel option and make -fexperimental-isel an alias …
Browse files Browse the repository at this point in the history
…for it.

Since GlobalISel is maturing and is already on at -O0 for AArch64, it's not
completely "experimental". Create a more appropriate driver flag and make
the older option an alias for it.

Differential Revision: https://reviews.llvm.org/D77103
  • Loading branch information
aemerson committed Mar 31, 2020
1 parent dacf8d3 commit 7f1ea92
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 21 deletions.
12 changes: 6 additions & 6 deletions clang/include/clang/Basic/DiagnosticDriverKinds.td
Expand Up @@ -452,13 +452,13 @@ 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_global_isel_incomplete : Warning<
"-fglobal-isel support for the '%0' architecture is incomplete">,
InGroup<GlobalISel>;

def warn_drv_experimental_isel_incomplete_opt : Warning<
"-fexperimental-isel support is incomplete for this architecture at the current optimization level">,
InGroup<ExperimentalISel>;
def warn_drv_global_isel_incomplete_opt : Warning<
"-fglobal-isel support is incomplete for this architecture at the current optimization level">,
InGroup<GlobalISel>;

def warn_drv_moutline_unsupported_opt : Warning<
"The '%0' architecture does not support -moutline; flag ignored">,
Expand Down
4 changes: 2 additions & 2 deletions clang/include/clang/Basic/DiagnosticGroups.td
Expand Up @@ -1154,8 +1154,8 @@ def UnknownArgument : DiagGroup<"unknown-argument">;
// 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">;
// Warning for the GlobalISel options.
def GlobalISel : DiagGroup<"global-isel">;

// A warning group specifically for warnings related to function
// multiversioning.
Expand Down
8 changes: 6 additions & 2 deletions clang/include/clang/Driver/Options.td
Expand Up @@ -1249,8 +1249,10 @@ def finline_functions : Flag<["-"], "finline-functions">, Group<f_clang_Group>,
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 fglobal_isel : Flag<["-"], "fglobal-isel">, Group<f_clang_Group>,
HelpText<"Enables the global instruction selector">;
def fexperimental_isel : Flag<["-"], "fexperimental-isel">, Group<f_clang_Group>,
HelpText<"Enables the experimental global instruction selector">;
Alias<fglobal_isel>;
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.">;
Expand Down Expand Up @@ -1530,8 +1532,10 @@ def fno_exceptions : Flag<["-"], "fno-exceptions">, Group<f_Group>;
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_global_isel : Flag<["-"], "fno-global-isel">, Group<f_clang_Group>,
HelpText<"Disables the global instruction selector">;
def fno_experimental_isel : Flag<["-"], "fno-experimental-isel">, Group<f_clang_Group>,
HelpText<"Disables the experimental global instruction selector">;
Alias<fno_global_isel>;
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.">;
Expand Down
10 changes: 5 additions & 5 deletions clang/lib/Driver/ToolChains/Clang.cpp
Expand Up @@ -6062,10 +6062,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
if (SplitLTOUnit)
CmdArgs.push_back("-fsplit-lto-unit");

if (Arg *A = Args.getLastArg(options::OPT_fexperimental_isel,
options::OPT_fno_experimental_isel)) {
if (Arg *A = Args.getLastArg(options::OPT_fglobal_isel,
options::OPT_fno_global_isel)) {
CmdArgs.push_back("-mllvm");
if (A->getOption().matches(options::OPT_fexperimental_isel)) {
if (A->getOption().matches(options::OPT_fglobal_isel)) {
CmdArgs.push_back("-global-isel=1");

// GISel is on by default on AArch64 -O0, so don't bother adding
Expand All @@ -6084,9 +6084,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("-global-isel-abort=2");

if (!IsArchSupported)
D.Diag(diag::warn_drv_experimental_isel_incomplete) << Triple.getArchName();
D.Diag(diag::warn_drv_global_isel_incomplete) << Triple.getArchName();
else
D.Diag(diag::warn_drv_experimental_isel_incomplete_opt);
D.Diag(diag::warn_drv_global_isel_incomplete_opt);
}
} else {
CmdArgs.push_back("-global-isel=0");
Expand Down
23 changes: 17 additions & 6 deletions clang/test/Driver/global-isel.c
@@ -1,24 +1,35 @@
// REQUIRES: x86-registered-target,aarch64-registered-target

// RUN: %clang -fglobal-isel -S -### %s 2>&1 | FileCheck --check-prefix=ENABLED %s
// RUN: %clang -fno-global-isel -S -### %s 2>&1 | FileCheck --check-prefix=DISABLED %s

// RUN: %clang -target aarch64 -fglobal-isel -S %s -### 2>&1 | FileCheck --check-prefix=ARM64-DEFAULT %s
// RUN: %clang -target aarch64 -fglobal-isel -S -O0 %s -### 2>&1 | FileCheck --check-prefix=ARM64-O0 %s
// RUN: %clang -target aarch64 -fglobal-isel -S -O2 %s -### 2>&1 | FileCheck --check-prefix=ARM64-O2 %s
// RUN: %clang -target aarch64 -fglobal-isel -Wno-global-isel -S -O2 %s -### 2>&1 | FileCheck --check-prefix=ARM64-O2-NOWARN %s

// RUN: %clang -target x86_64 -fglobal-isel -S %s -### 2>&1 | FileCheck --check-prefix=X86_64 %s

// Now test the aliases.

// 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: warning: -fglobal-isel
// 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-O0-NOT: warning: -fglobal-isel
// ARM64-O2: warning: -fglobal-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
// ARM64-O2-NOWARN-NOT: warning: -fglobal-isel

// X86_64: -fexperimental-isel support for the 'x86_64' architecture is incomplete
// X86_64: -fglobal-isel support for the 'x86_64' architecture is incomplete
// X86_64: "-mllvm" "-global-isel-abort=2"

0 comments on commit 7f1ea92

Please sign in to comment.