Anti-dependency breaking needs to be careful not to use reserved regs
[oota-llvm.git] / lib / CodeGen / CriticalAntiDepBreaker.cpp
index 98d4d413201815d174864e32ca8178c6ed47c8cd..335d2d8e9bac7737bf2d9ca56aa985f38aba05d2 100644 (file)
@@ -330,6 +330,8 @@ CriticalAntiDepBreaker::findSuitableFreeRegister(MachineInstr *MI,
   for (TargetRegisterClass::iterator R = RC->allocation_order_begin(MF),
        RE = RC->allocation_order_end(MF); R != RE; ++R) {
     unsigned NewReg = *R;
+    // Don't consider non-allocatable registers
+    if (!AllocatableSet.test(NewReg)) continue;
     // Don't replace a register with itself.
     if (NewReg == AntiDepReg) continue;
     // Don't replace a register with one that was recently used to repair