Skip to content

Commit

Permalink
[TargetPassConfig] Add a hook to tell whether GlobalISel should warm …
Browse files Browse the repository at this point in the history
…on fallback.

Thanks to this patch, we know have a way to easly see if GlobalISel
failed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280273 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Quentin Colombet committed Aug 31, 2016
1 parent 8e21d40 commit e41c902
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
5 changes: 5 additions & 0 deletions include/llvm/CodeGen/TargetPassConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,11 @@ class TargetPassConfig : public ImmutablePass {
/// erroring out.
virtual bool isGlobalISelAbortEnabled() const;

/// Check whether or not a diagnostic should be emitted when GlobalISel
/// uses the fallback path. In other words, it will emit a diagnostic
/// when GlobalISel failed and isGlobalISelAbortEnabled is false.
virtual bool reportDiagnosticWhenGlobalISelFallback() const;

protected:
// Helper to verify the analysis is really immutable.
void setOpt(bool &Opt, bool Val);
Expand Down
3 changes: 2 additions & 1 deletion lib/CodeGen/LLVMTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,8 @@ addPassesToGenerateCode(LLVMTargetMachine *TM, PassManagerBase &PM,
return nullptr;

// Pass to reset the MachineFunction if the ISel failed.
PM.add(createResetMachineFunctionPass());
PM.add(createResetMachineFunctionPass(
PassConfig->reportDiagnosticWhenGlobalISelFallback()));

// Provide a fallback path when we do not want to abort on
// not-yet-supported input.
Expand Down
14 changes: 10 additions & 4 deletions lib/CodeGen/TargetPassConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,13 @@ PrintMachineInstrs("print-machineinstrs", cl::ValueOptional,
cl::desc("Print machine instrs"),
cl::value_desc("pass-name"), cl::init("option-unspecified"));

static cl::opt<bool> EnableGlobalISelAbort(
static cl::opt<int> EnableGlobalISelAbort(
"global-isel-abort", cl::Hidden,
cl::desc("Enable abort calls when \"global\" instruction selection "
"fails to lower/select an instruction"),
cl::init(true));
"fails to lower/select an instruction: 0 disable the abort, "
"1 enable the abort, and "
"2 disable the abort but emit a diagnostic on failure"),
cl::init(1));

// Temporary option to allow experimenting with MachineScheduler as a post-RA
// scheduler. Targets can "properly" enable this with
Expand Down Expand Up @@ -899,5 +901,9 @@ void TargetPassConfig::addBlockPlacement() {
/// GlobalISel Configuration
//===---------------------------------------------------------------------===//
bool TargetPassConfig::isGlobalISelAbortEnabled() const {
return EnableGlobalISelAbort;
return EnableGlobalISelAbort == 1;
}

bool TargetPassConfig::reportDiagnosticWhenGlobalISelFallback() const {
return EnableGlobalISelAbort == 2;
}
5 changes: 4 additions & 1 deletion test/CodeGen/AArch64/GlobalISel/arm64-fallback.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
; RUN: not llc -O0 -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=ERROR
; RUN: llc -O0 -global-isel -global-isel-abort=false -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=FALLBACK
; RUN: llc -O0 -global-isel -global-isel-abort=0 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=FALLBACK
; RUN: llc -O0 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=FALLBACK_WITH_REPORT
; This file checks that the fallback path to selection dag works.
; The test is fragile in the sense that it must be updated to expose
; something that fails with global-isel.
Expand All @@ -12,6 +13,8 @@ target triple = "aarch64-apple-ios"
; ERROR: Unable to lower arguments
; FALLBACK: ldr q0,
; FALLBACK-NEXT: bl ___fixunstfti
;
; FALLBACK_WITH_REPORT-DAG: bl ___fixunstfti
define i128 @ABIi128(i128 %arg1) {
%farg1 = bitcast i128 %arg1 to fp128
%res = fptoui fp128 %farg1 to i128
Expand Down

0 comments on commit e41c902

Please sign in to comment.