mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[Hexagon] Incorrectly removing dead flag and adding kill flag
The HexagonExpandCondsets pass is incorrectly removing the dead flag on a definition that is really dead, and adding a kill flag to a use that is tied to a definition. This causes an assert later during the machine scheduler when querying the live interval information. Patch by Brendon Cahoon. llvm-svn: 328357
This commit is contained in:
parent
fdc90cd4c2
commit
75bf396b72
@ -316,8 +316,10 @@ void HexagonExpandCondsets::updateKillFlags(unsigned Reg) {
|
||||
auto KillAt = [this,Reg] (SlotIndex K, LaneBitmask LM) -> void {
|
||||
// Set the <kill> flag on a use of Reg whose lane mask is contained in LM.
|
||||
MachineInstr *MI = LIS->getInstructionFromIndex(K);
|
||||
for (auto &Op : MI->operands()) {
|
||||
if (!Op.isReg() || !Op.isUse() || Op.getReg() != Reg)
|
||||
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||
MachineOperand &Op = MI->getOperand(i);
|
||||
if (!Op.isReg() || !Op.isUse() || Op.getReg() != Reg ||
|
||||
MI->isRegTiedToDefOperand(i))
|
||||
continue;
|
||||
LaneBitmask SLM = getLaneMask(Reg, Op.getSubReg());
|
||||
if ((SLM & LM) == SLM) {
|
||||
@ -1324,7 +1326,6 @@ bool HexagonExpandCondsets::runOnMachineFunction(MachineFunction &MF) {
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Public Constructor Functions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
FunctionPass *llvm::createHexagonExpandCondsets() {
|
||||
return new HexagonExpandCondsets();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user