diff --git a/clang/test/CodeGen/pre-ra-sched.c b/clang/test/CodeGen/pre-ra-sched.c new file mode 100644 index 00000000000000..3bd7594a5db90b --- /dev/null +++ b/clang/test/CodeGen/pre-ra-sched.c @@ -0,0 +1,4 @@ +// RUN: %clang %s -mllvm -pre-RA-sched=fast -c -o - | FileCheck %s +// RUN: %clang %s -mllvm -pre-RA-sched=linearize -c -o - | FileCheck %s + +// CHECK-NOT: clang (LLVM option parsing): for the --pre-RA-sched option: Cannot find option named diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h index b3f7843a035011..13079b8f17fc19 100644 --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -94,14 +94,16 @@ class Value; namespace Sched { - enum Preference { - None, // No preference - Source, // Follow source order. - RegPressure, // Scheduling for lowest register pressure. - Hybrid, // Scheduling for both latency and register pressure. - ILP, // Scheduling for ILP in low register pressure mode. - VLIW // Scheduling for VLIW targets. - }; +enum Preference { + None, // No preference + Source, // Follow source order. + RegPressure, // Scheduling for lowest register pressure. + Hybrid, // Scheduling for both latency and register pressure. + ILP, // Scheduling for ILP in low register pressure mode. + VLIW, // Scheduling for VLIW targets. + Fast, // Fast suboptimal list scheduling + Linearize // Linearize DAG, no scheduling +}; } // end namespace Sched diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 6983d6fcb0f7ee..3d035e875925f0 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -270,6 +270,10 @@ namespace llvm { return createHybridListDAGScheduler(IS, OptLevel); if (TLI->getSchedulingPreference() == Sched::VLIW) return createVLIWDAGScheduler(IS, OptLevel); + if (TLI->getSchedulingPreference() == Sched::Fast) + return createFastDAGScheduler(IS, OptLevel); + if (TLI->getSchedulingPreference() == Sched::Linearize) + return createDAGLinearizer(IS, OptLevel); assert(TLI->getSchedulingPreference() == Sched::ILP && "Unknown sched type!"); return createILPListDAGScheduler(IS, OptLevel);