forked from OSchip/llvm-project
Fix some more places where dbg_value affected codegen.
llvm-svn: 97765
This commit is contained in:
parent
9984bd6092
commit
2061c84109
|
@ -334,7 +334,9 @@ static unsigned ComputeCommonTailLength(MachineBasicBlock *MBB1,
|
|||
unsigned TailLen = 0;
|
||||
while (I1 != MBB1->begin() && I2 != MBB2->begin()) {
|
||||
--I1; --I2;
|
||||
if (!I1->isIdenticalTo(I2) ||
|
||||
// Don't merge debugging pseudos.
|
||||
if (I1->isDebugValue() || I2->isDebugValue() ||
|
||||
!I1->isIdenticalTo(I2) ||
|
||||
// FIXME: This check is dubious. It's used to get around a problem where
|
||||
// people incorrectly expect inline asm directives to remain in the same
|
||||
// relative order. This is untenable because normal compiler
|
||||
|
@ -412,6 +414,8 @@ static unsigned EstimateRuntime(MachineBasicBlock::iterator I,
|
|||
MachineBasicBlock::iterator E) {
|
||||
unsigned Time = 0;
|
||||
for (; I != E; ++I) {
|
||||
if (I->isDebugValue())
|
||||
continue;
|
||||
const TargetInstrDesc &TID = I->getDesc();
|
||||
if (TID.isCall())
|
||||
Time += 10;
|
||||
|
|
|
@ -119,6 +119,8 @@ void CriticalAntiDepBreaker::FinishBlock() {
|
|||
|
||||
void CriticalAntiDepBreaker::Observe(MachineInstr *MI, unsigned Count,
|
||||
unsigned InsertPosIndex) {
|
||||
if (MI->isDebugValue())
|
||||
return;
|
||||
assert(Count < InsertPosIndex && "Instruction index out of expected range!");
|
||||
|
||||
// Any register which was defined within the previous scheduling region
|
||||
|
@ -409,6 +411,8 @@ BreakAntiDependencies(std::vector<SUnit>& SUnits,
|
|||
for (MachineBasicBlock::iterator I = End, E = Begin;
|
||||
I != E; --Count) {
|
||||
MachineInstr *MI = --I;
|
||||
if (MI->isDebugValue())
|
||||
continue;
|
||||
|
||||
// Check if this instruction has a dependence on the critical path that
|
||||
// is an anti-dependence that we may be able to break. If it is, set
|
||||
|
|
|
@ -72,8 +72,13 @@ bool MachineSinking::AllUsesDominatedByBlock(unsigned Reg,
|
|||
MachineBasicBlock *MBB) const {
|
||||
assert(TargetRegisterInfo::isVirtualRegister(Reg) &&
|
||||
"Only makes sense for vregs");
|
||||
for (MachineRegisterInfo::use_iterator I = RegInfo->use_begin(Reg),
|
||||
E = RegInfo->use_end(); I != E; ++I) {
|
||||
// Ignoring debug uses is necessary so debug info doesn't affect the code.
|
||||
// This may leave a referencing dbg_value in the original block, before
|
||||
// the definition of the vreg. Dwarf generator handles this although the
|
||||
// user might not get the right info at runtime.
|
||||
for (MachineRegisterInfo::use_nodbg_iterator I =
|
||||
RegInfo->use_nodbg_begin(Reg),
|
||||
E = RegInfo->use_nodbg_end(); I != E; ++I) {
|
||||
// Determine the block of the use.
|
||||
MachineInstr *UseInst = &*I;
|
||||
MachineBasicBlock *UseBlock = UseInst->getParent();
|
||||
|
@ -135,7 +140,10 @@ bool MachineSinking::ProcessBlock(MachineBasicBlock &MBB) {
|
|||
ProcessedBegin = I == MBB.begin();
|
||||
if (!ProcessedBegin)
|
||||
--I;
|
||||
|
||||
|
||||
if (MI->isDebugValue())
|
||||
continue;
|
||||
|
||||
if (SinkInstruction(MI, SawStore))
|
||||
++NumSunk, MadeChange = true;
|
||||
|
||||
|
|
|
@ -460,6 +460,8 @@ void SchedulePostRATDList::FixupKills(MachineBasicBlock *MBB) {
|
|||
for (MachineBasicBlock::iterator I = MBB->end(), E = MBB->begin();
|
||||
I != E; --Count) {
|
||||
MachineInstr *MI = --I;
|
||||
if (MI->isDebugValue())
|
||||
continue;
|
||||
|
||||
// Update liveness. Registers that are defed but not used in this
|
||||
// instruction are now dead. Mark register and all subregs as they
|
||||
|
|
Loading…
Reference in New Issue