forked from OSchip/llvm-project
When unfolding a load, avoid assuming which instruction that
kill and dead flags will end up on. llvm-svn: 106520
This commit is contained in:
parent
b6e058da18
commit
2370e2fe0f
|
@ -964,10 +964,24 @@ TryInstructionTransform(MachineBasicBlock::iterator &mi,
|
||||||
if (MO.isReg() && MO.getReg() != 0 &&
|
if (MO.isReg() && MO.getReg() != 0 &&
|
||||||
TargetRegisterInfo::isVirtualRegister(MO.getReg())) {
|
TargetRegisterInfo::isVirtualRegister(MO.getReg())) {
|
||||||
if (MO.isUse()) {
|
if (MO.isUse()) {
|
||||||
if (MO.isKill())
|
if (MO.isKill()) {
|
||||||
LV->replaceKillInstruction(MO.getReg(), mi, NewMIs[0]);
|
if (NewMIs[0]->killsRegister(MO.getReg()))
|
||||||
} else if (LV->removeVirtualRegisterDead(MO.getReg(), mi))
|
LV->replaceKillInstruction(MO.getReg(), mi, NewMIs[0]);
|
||||||
LV->addVirtualRegisterDead(MO.getReg(), NewMIs[1]);
|
else {
|
||||||
|
assert(NewMIs[1]->killsRegister(MO.getReg()) &&
|
||||||
|
"Kill missing after load unfold!");
|
||||||
|
LV->replaceKillInstruction(MO.getReg(), mi, NewMIs[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (LV->removeVirtualRegisterDead(MO.getReg(), mi)) {
|
||||||
|
if (NewMIs[1]->registerDefIsDead(MO.getReg()))
|
||||||
|
LV->addVirtualRegisterDead(MO.getReg(), NewMIs[1]);
|
||||||
|
else {
|
||||||
|
assert(NewMIs[0]->registerDefIsDead(MO.getReg()) &&
|
||||||
|
"Dead flag missing after load unfold!");
|
||||||
|
LV->addVirtualRegisterDead(MO.getReg(), NewMIs[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LV->addVirtualRegisterKilled(Reg, NewMIs[1]);
|
LV->addVirtualRegisterKilled(Reg, NewMIs[1]);
|
||||||
|
|
Loading…
Reference in New Issue