diff options
| author | Dale Johannesen <dalej@apple.com> | 2010-02-16 01:57:28 +0000 |
|---|---|---|
| committer | Dale Johannesen <dalej@apple.com> | 2010-02-16 01:57:28 +0000 |
| commit | 35740e3d4acada6a7b9ecfd61d604abcadbb07a1 (patch) | |
| tree | b53c159843b52f417f3813c7b822757fdf80847a | |
| parent | 901b5750b2af095bb0e359f4d2c3debef3ad57e6 (diff) | |
| download | external_llvm-35740e3d4acada6a7b9ecfd61d604abcadbb07a1.zip external_llvm-35740e3d4acada6a7b9ecfd61d604abcadbb07a1.tar.gz external_llvm-35740e3d4acada6a7b9ecfd61d604abcadbb07a1.tar.bz2 | |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96318 91177308-0d34-0410-b5e6-96231b3b80d8
| -rw-r--r-- | lib/CodeGen/PHIElimination.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/CodeGen/PHIElimination.h b/lib/CodeGen/PHIElimination.h index 895aaa4..f3ab9e2 100644 --- a/lib/CodeGen/PHIElimination.h +++ b/lib/CodeGen/PHIElimination.h @@ -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; } |
