diff --git a/include/llvm/Target/TargetOptions.h b/include/llvm/Target/TargetOptions.h index fa739507db0..42011d928c0 100644 --- a/include/llvm/Target/TargetOptions.h +++ b/include/llvm/Target/TargetOptions.h @@ -101,6 +101,12 @@ namespace llvm { /// DisableJumpTables - This flag indicates jump tables should not be /// generated. extern bool DisableJumpTables; + + /// FastISel - This flag enables fast-path instruction selection + /// which trades away generated code quality in favor of reducing + /// compile time. + extern bool EnableFastISel; + } // End llvm namespace #endif diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp index 60925f31ddf..93685401369 100644 --- a/lib/CodeGen/LLVMTargetMachine.cpp +++ b/lib/CodeGen/LLVMTargetMachine.cpp @@ -25,6 +25,10 @@ #include "llvm/Support/raw_ostream.h" using namespace llvm; +namespace llvm { + bool EnableFastISel; +} + static cl::opt PrintLSR("print-lsr-output", cl::Hidden, cl::desc("Print LLVM IR produced by the loop-reduce pass")); static cl::opt PrintISelInput("print-isel-input", cl::Hidden, @@ -49,6 +53,11 @@ DisablePostRAScheduler("disable-post-RA-scheduler", cl::desc("Disable scheduling after register allocation"), cl::init(true)); +static cl::opt +FastISelOption("fast-isel", cl::Hidden, + cl::desc("Enable the experimental \"fast\" instruction selector"), + cl::location(EnableFastISel)); + FileModel::Model LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM, raw_ostream &Out, @@ -168,6 +177,10 @@ bool LLVMTargetMachine::addCommonCodeGenPasses(PassManagerBase &PM, bool Fast) { if (PrintMachineCode) PM.add(createMachineFunctionPrinterPass(cerr)); + // If we're using Fast-ISel, clean up the mess. + if (EnableFastISel) + PM.add(createDeadMachineInstructionElimPass()); + if (EnableLICM) PM.add(createMachineLICMPass()); diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index afb290d822c..9e12a272ad6 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -56,9 +56,6 @@ EnableValueProp("enable-value-prop", cl::Hidden); static cl::opt EnableLegalizeTypes("enable-legalize-types", cl::Hidden); 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"));