mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-14 07:31:39 +00:00
Handle DBG_VALUE mixed with labels when doing PHI
elimination. Before a DBG_VALUE could affect codegen. The solution here is imperfect and not final. llvm-svn: 96318
This commit is contained in:
parent
8962ca0e05
commit
622053fec3
@ -109,12 +109,29 @@ namespace llvm {
|
|||||||
// SkipPHIsAndLabels - Copies need to be inserted after phi nodes and
|
// SkipPHIsAndLabels - Copies need to be inserted after phi nodes and
|
||||||
// also after any exception handling labels: in landing pads execution
|
// also after any exception handling labels: in landing pads execution
|
||||||
// starts at the label, so any copies placed before it won't be executed!
|
// starts at the label, so any copies placed before it won't be executed!
|
||||||
|
// We also deal with DBG_VALUEs, which are a bit tricky:
|
||||||
|
// PHI
|
||||||
|
// DBG_VALUE
|
||||||
|
// LABEL
|
||||||
|
// Here the DBG_VALUE needs to be skipped, and if it refers to a PHI it
|
||||||
|
// needs to be annulled or, better, moved to follow the label, as well.
|
||||||
|
// PHI
|
||||||
|
// DBG_VALUE
|
||||||
|
// no label
|
||||||
|
// Here it is not a good idea to skip the DBG_VALUE.
|
||||||
|
// FIXME: For now we skip and annul all DBG_VALUEs, maximally simple and
|
||||||
|
// maximally stupid.
|
||||||
MachineBasicBlock::iterator SkipPHIsAndLabels(MachineBasicBlock &MBB,
|
MachineBasicBlock::iterator SkipPHIsAndLabels(MachineBasicBlock &MBB,
|
||||||
MachineBasicBlock::iterator I) {
|
MachineBasicBlock::iterator I) {
|
||||||
// Rather than assuming that EH labels come before other kinds of labels,
|
// Rather than assuming that EH labels come before other kinds of labels,
|
||||||
// just skip all labels.
|
// just skip all labels.
|
||||||
while (I != MBB.end() && (I->isPHI() || I->isLabel()))
|
while (I != MBB.end() &&
|
||||||
|
(I->isPHI() || I->isLabel() || I->isDebugValue())) {
|
||||||
|
if (I->isDebugValue() && I->getNumOperands()==3 &&
|
||||||
|
I->getOperand(0).isReg())
|
||||||
|
I->getOperand(0).setReg(0U);
|
||||||
++I;
|
++I;
|
||||||
|
}
|
||||||
return I;
|
return I;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user