diff options
Diffstat (limited to 'lib/CodeGen/RegAllocFast.cpp')
| -rw-r--r-- | lib/CodeGen/RegAllocFast.cpp | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/CodeGen/RegAllocFast.cpp b/lib/CodeGen/RegAllocFast.cpp index c606b7b833104..d5538be4bba25 100644 --- a/lib/CodeGen/RegAllocFast.cpp +++ b/lib/CodeGen/RegAllocFast.cpp @@ -203,6 +203,8 @@ namespace {    char RAFast::ID = 0;  } +INITIALIZE_PASS(RAFast, "regallocfast", "Fast Register Allocator", false, false) +  /// getStackSpaceFor - This allocates space for the specified virtual register  /// to be held on the stack.  int RAFast::getStackSpaceFor(unsigned VirtReg, const TargetRegisterClass *RC) { @@ -244,8 +246,15 @@ void RAFast::addKillFlag(const LiveReg &LR) {    if (MO.isUse() && !LR.LastUse->isRegTiedToDefOperand(LR.LastOpNum)) {      if (MO.getReg() == LR.PhysReg)        MO.setIsKill(); -    else -      LR.LastUse->addRegisterKilled(LR.PhysReg, TRI, true); +    // else, don't do anything we are problably redefining a +    // subreg of this register and given we don't track which +    // lanes are actually dead, we cannot insert a kill flag here. +    // Otherwise we may end up in a situation like this: +    // ... = (MO) physreg:sub1, physreg <implicit-use, kill> +    // ... <== Here we would allow later pass to reuse physreg:sub1 +    //         which is potentially wrong. +    // LR:sub0 = ... +    // ... = LR.sub1 <== This is going to use physreg:sub1    }  }  | 
