From 293d5f8bc02a9148238b2c79484637f56de65b9c Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 9 Sep 2008 22:06:46 +0000 Subject: [PATCH] Add a new option, -fast-isel-verbose, that can be used with -fast-isel-no-abort to get a dump of all unhandled instructions, without an abort. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56021 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index a2716c2706c..070bd7084e6 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -60,6 +60,10 @@ static cl::opt EnableFastISel("fast-isel", cl::Hidden, cl::desc("Enable the experimental \"fast\" instruction selector")); static cl::opt +EnableFastISelVerbose("fast-isel-verbose", cl::Hidden, + cl::desc("Enable verbose messages in the experimental \"fast\" " + "instruction selector")); +static cl::opt DisableFastISelAbort("fast-isel-no-abort", cl::Hidden, cl::desc("Use the SelectionDAGISel when \"fast\" instruction " "selection fails")); @@ -743,12 +747,12 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF) { // feed PHI nodes in successor blocks. if (isa(BI)) if (!HandlePHINodesInSuccessorBlocksFast(LLVMBB, F)) { - if (DisableFastISelAbort) - break; -#ifndef NDEBUG - BI->dump(); -#endif - assert(0 && "FastISel didn't handle a PHI in a successor"); + if (EnableFastISelVerbose || !DisableFastISelAbort) { + cerr << "FastISel miss: "; + BI->dump(); + } + if (!DisableFastISelAbort) + assert(0 && "FastISel didn't handle a PHI in a successor"); } // First try normal tablegen-generated "fast" selection. @@ -771,15 +775,17 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF) { continue; } - if (!DisableFastISelAbort && - // For now, don't abort on non-conditional-branch terminators. - (!isa(BI) || isa(BI))) { - // The "fast" selector couldn't handle something and bailed. - // For the purpose of debugging, just abort. -#ifndef NDEBUG - BI->dump(); -#endif - assert(0 && "FastISel didn't select the entire block"); + // Otherwise, give up on FastISel for the rest of the block. + // For now, be a little lenient about non-branch terminators. + if (!isa(BI) || isa(BI)) { + if (EnableFastISelVerbose || !DisableFastISelAbort) { + cerr << "FastISel miss: "; + BI->dump(); + } + if (!DisableFastISelAbort) + // The "fast" selector couldn't handle something and bailed. + // For the purpose of debugging, just abort. + assert(0 && "FastISel didn't select the entire block"); } break; }