diff options
Diffstat (limited to 'contrib/llvm/lib/CodeGen/VirtRegMap.cpp')
| -rw-r--r-- | contrib/llvm/lib/CodeGen/VirtRegMap.cpp | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/contrib/llvm/lib/CodeGen/VirtRegMap.cpp b/contrib/llvm/lib/CodeGen/VirtRegMap.cpp index 7d3b0cea1c15..9fb1b5b65fbb 100644 --- a/contrib/llvm/lib/CodeGen/VirtRegMap.cpp +++ b/contrib/llvm/lib/CodeGen/VirtRegMap.cpp @@ -264,8 +264,7 @@ void VirtRegRewriter::addMBBLiveIns() {              if ((SubRegLaneMask & S.LaneMask) == 0)                continue;              for (unsigned i = 0, e = LiveIn.size(); i != e; ++i) { -              if (!LiveIn[i]->isLiveIn(SubReg)) -                LiveIn[i]->addLiveIn(SubReg); +              LiveIn[i]->addLiveIn(SubReg);              }            }            LiveIn.clear(); @@ -277,16 +276,20 @@ void VirtRegRewriter::addMBBLiveIns() {          if (!Indexes->findLiveInMBBs(Seg.start, Seg.end, LiveIn))            continue;          for (unsigned i = 0, e = LiveIn.size(); i != e; ++i) -          if (!LiveIn[i]->isLiveIn(PhysReg)) -            LiveIn[i]->addLiveIn(PhysReg); +          LiveIn[i]->addLiveIn(PhysReg);          LiveIn.clear();        }      }    } + +  // Sort and unique MBB LiveIns as we've not checked if SubReg/PhysReg were in +  // each MBB's LiveIns set before calling addLiveIn on them. +  for (MachineBasicBlock &MBB : *MF) +    MBB.sortUniqueLiveIns();  }  void VirtRegRewriter::rewrite() { -  bool NoSubRegLiveness = !MRI->tracksSubRegLiveness(); +  bool NoSubRegLiveness = !MRI->subRegLivenessEnabled();    SmallVector<unsigned, 8> SuperDeads;    SmallVector<unsigned, 8> SuperDefs;    SmallVector<unsigned, 8> SuperKills;  | 
