forked from OSchip/llvm-project
[globalisel][verifier] Run the MachineVerifier from IRTranslator onwards
-verify-machineinstrs inserts the MachineVerifier after every MachineInstr-based pass. However, GlobalISel creates MachineInstr-based passes earlier than DAGISel and the corresponding verifiers are not being added. This patch fixes that. If GlobalISel triggers the fallback path then the MIR can be left in a bad state that is going to be cleared by ResetMachineFunctions. In this situation verifying between GlobalISel passes will prevent the fallback path from recovering from this. As a result, we bail out of verifying a function if the FailedISel attribute is present. llvm-svn: 343613
This commit is contained in:
parent
f796e763b2
commit
74de21d06f
|
@ -364,6 +364,13 @@ unsigned MachineVerifier::verify(MachineFunction &MF) {
|
|||
|
||||
const bool isFunctionFailedISel = MF.getProperties().hasProperty(
|
||||
MachineFunctionProperties::Property::FailedISel);
|
||||
|
||||
// If we're mid-GlobalISel and we already triggered the fallback path then
|
||||
// it's expected that the MIR is somewhat broken but that's ok since we'll
|
||||
// reset it and clear the FailedISel attribute in ResetMachineFunctions.
|
||||
if (isFunctionFailedISel)
|
||||
return foundErrors;
|
||||
|
||||
isFunctionRegBankSelected =
|
||||
!isFunctionFailedISel &&
|
||||
MF.getProperties().hasProperty(
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Threading.h"
|
||||
#include "llvm/Support/SaveAndRestore.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
#include "llvm/Transforms/Utils.h"
|
||||
|
@ -726,6 +727,7 @@ bool TargetPassConfig::addCoreISelPasses() {
|
|||
TM->Options.EnableGlobalISel && EnableFastISelOption != cl::BOU_TRUE)) {
|
||||
TM->setFastISel(false);
|
||||
|
||||
SaveAndRestore<bool> SavedAddingMachinePasses(AddingMachinePasses, true);
|
||||
if (addIRTranslator())
|
||||
return true;
|
||||
|
||||
|
|
Loading…
Reference in New Issue