diff options
Diffstat (limited to 'llvm/lib/CodeGen/RegAllocGreedy.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/RegAllocGreedy.cpp | 14 | 
1 files changed, 8 insertions, 6 deletions
| diff --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp index 0c93d266004..c46d6071702 100644 --- a/llvm/lib/CodeGen/RegAllocGreedy.cpp +++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp @@ -2556,18 +2556,20 @@ unsigned RAGreedy::selectOrSplitImpl(LiveInterval &VirtReg,      return 0;    } +  if (Stage == RS_Split || Stage == RS_Split2) { +    // Try splitting VirtReg or interferences. +    unsigned NewVRegSizeBefore = NewVRegs.size(); +    unsigned PhysReg = trySplit(VirtReg, Order, NewVRegs); +    if (PhysReg || (NewVRegs.size() - NewVRegSizeBefore)) +      return PhysReg; +  } +    // If we couldn't allocate a register from spilling, there is probably some    // invalid inline assembly. The base class wil report it.    if (Stage >= RS_Done || !VirtReg.isSpillable())      return tryLastChanceRecoloring(VirtReg, Order, NewVRegs, FixedRegisters,                                     Depth); -  // Try splitting VirtReg or interferences. -  unsigned NewVRegSizeBefore = NewVRegs.size(); -  unsigned PhysReg = trySplit(VirtReg, Order, NewVRegs); -  if (PhysReg || (NewVRegs.size() - NewVRegSizeBefore)) -    return PhysReg; -    // Finally spill VirtReg itself.    if (EnableDeferredSpilling && getStage(VirtReg) < RS_Memory) {      // TODO: This is experimental and in particular, we do not model | 

