forked from OSchip/llvm-project
[TargetPassConfig] Add a hook to tell whether GlobalISel should warm on fallback.
Thanks to this patch, we know have a way to easly see if GlobalISel failed. llvm-svn: 280273
This commit is contained in:
parent
612cd1fdd6
commit
1c06a73a7c
|
@ -286,6 +286,11 @@ public:
|
|||
/// 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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue