@@ -1059,7 +1059,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addMachineSSAOptimization(
10591059// /
10601060// / A target that uses the standard regalloc pass order for fast or optimized
10611061// / allocation may still override this for per-target regalloc
1062- // / selection. But -regalloc=... always takes precedence.
1062+ // / selection. But -regalloc-npm =... always takes precedence.
10631063template <typename Derived, typename TargetMachineT>
10641064void CodeGenPassBuilder<Derived, TargetMachineT>::addTargetRegisterAllocator(
10651065 AddMachinePass &addPass, bool Optimized) const {
@@ -1076,6 +1076,22 @@ template <typename Derived, typename TargetMachineT>
10761076void CodeGenPassBuilder<Derived, TargetMachineT>::addRegAllocPass(
10771077 AddMachinePass &addPass, bool Optimized) const {
10781078 // TODO: Parse Opt.RegAlloc to add register allocator.
1079+ // Use the specified -regalloc-npm={basic|greedy|fast|pbqp}
1080+ if (Opt.RegAlloc > RegAllocType::Default) {
1081+ switch (Opt.RegAlloc ) {
1082+ case RegAllocType::Fast:
1083+ addPass (RegAllocFastPass ());
1084+ break ;
1085+ case RegAllocType::Greedy:
1086+ addPass (RAGreedyPass ());
1087+ break ;
1088+ default :
1089+ llvm_unreachable (" Register allocator not supported yet." );
1090+ }
1091+ return ;
1092+ }
1093+ // -regalloc=default or unspecified, so pick based on the optimization level.
1094+ derived ().addTargetRegisterAllocator (addPass, Optimized);
10791095}
10801096
10811097template <typename Derived, typename TargetMachineT>
0 commit comments