mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-26 21:47:07 +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
|
||||
// also after any exception handling labels: in landing pads execution
|
||||
// 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 I) {
|
||||
// Rather than assuming that EH labels come before other kinds of 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;
|
||||
}
|
||||
return I;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user