mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-26 07:34:06 +00:00
Fix some more places where dbg_value affected codegen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97765 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e1d50cd5e4
commit
b0812f114b
@ -334,7 +334,9 @@ static unsigned ComputeCommonTailLength(MachineBasicBlock *MBB1,
|
|||||||
unsigned TailLen = 0;
|
unsigned TailLen = 0;
|
||||||
while (I1 != MBB1->begin() && I2 != MBB2->begin()) {
|
while (I1 != MBB1->begin() && I2 != MBB2->begin()) {
|
||||||
--I1; --I2;
|
--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
|
// 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
|
// people incorrectly expect inline asm directives to remain in the same
|
||||||
// relative order. This is untenable because normal compiler
|
// relative order. This is untenable because normal compiler
|
||||||
@ -412,6 +414,8 @@ static unsigned EstimateRuntime(MachineBasicBlock::iterator I,
|
|||||||
MachineBasicBlock::iterator E) {
|
MachineBasicBlock::iterator E) {
|
||||||
unsigned Time = 0;
|
unsigned Time = 0;
|
||||||
for (; I != E; ++I) {
|
for (; I != E; ++I) {
|
||||||
|
if (I->isDebugValue())
|
||||||
|
continue;
|
||||||
const TargetInstrDesc &TID = I->getDesc();
|
const TargetInstrDesc &TID = I->getDesc();
|
||||||
if (TID.isCall())
|
if (TID.isCall())
|
||||||
Time += 10;
|
Time += 10;
|
||||||
|
@ -119,6 +119,8 @@ void CriticalAntiDepBreaker::FinishBlock() {
|
|||||||
|
|
||||||
void CriticalAntiDepBreaker::Observe(MachineInstr *MI, unsigned Count,
|
void CriticalAntiDepBreaker::Observe(MachineInstr *MI, unsigned Count,
|
||||||
unsigned InsertPosIndex) {
|
unsigned InsertPosIndex) {
|
||||||
|
if (MI->isDebugValue())
|
||||||
|
return;
|
||||||
assert(Count < InsertPosIndex && "Instruction index out of expected range!");
|
assert(Count < InsertPosIndex && "Instruction index out of expected range!");
|
||||||
|
|
||||||
// Any register which was defined within the previous scheduling region
|
// 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;
|
for (MachineBasicBlock::iterator I = End, E = Begin;
|
||||||
I != E; --Count) {
|
I != E; --Count) {
|
||||||
MachineInstr *MI = --I;
|
MachineInstr *MI = --I;
|
||||||
|
if (MI->isDebugValue())
|
||||||
|
continue;
|
||||||
|
|
||||||
// Check if this instruction has a dependence on the critical path that
|
// 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
|
// 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 {
|
MachineBasicBlock *MBB) const {
|
||||||
assert(TargetRegisterInfo::isVirtualRegister(Reg) &&
|
assert(TargetRegisterInfo::isVirtualRegister(Reg) &&
|
||||||
"Only makes sense for vregs");
|
"Only makes sense for vregs");
|
||||||
for (MachineRegisterInfo::use_iterator I = RegInfo->use_begin(Reg),
|
// Ignoring debug uses is necessary so debug info doesn't affect the code.
|
||||||
E = RegInfo->use_end(); I != E; ++I) {
|
// 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.
|
// Determine the block of the use.
|
||||||
MachineInstr *UseInst = &*I;
|
MachineInstr *UseInst = &*I;
|
||||||
MachineBasicBlock *UseBlock = UseInst->getParent();
|
MachineBasicBlock *UseBlock = UseInst->getParent();
|
||||||
@ -135,7 +140,10 @@ bool MachineSinking::ProcessBlock(MachineBasicBlock &MBB) {
|
|||||||
ProcessedBegin = I == MBB.begin();
|
ProcessedBegin = I == MBB.begin();
|
||||||
if (!ProcessedBegin)
|
if (!ProcessedBegin)
|
||||||
--I;
|
--I;
|
||||||
|
|
||||||
|
if (MI->isDebugValue())
|
||||||
|
continue;
|
||||||
|
|
||||||
if (SinkInstruction(MI, SawStore))
|
if (SinkInstruction(MI, SawStore))
|
||||||
++NumSunk, MadeChange = true;
|
++NumSunk, MadeChange = true;
|
||||||
|
|
||||||
|
@ -460,6 +460,8 @@ void SchedulePostRATDList::FixupKills(MachineBasicBlock *MBB) {
|
|||||||
for (MachineBasicBlock::iterator I = MBB->end(), E = MBB->begin();
|
for (MachineBasicBlock::iterator I = MBB->end(), E = MBB->begin();
|
||||||
I != E; --Count) {
|
I != E; --Count) {
|
||||||
MachineInstr *MI = --I;
|
MachineInstr *MI = --I;
|
||||||
|
if (MI->isDebugValue())
|
||||||
|
continue;
|
||||||
|
|
||||||
// Update liveness. Registers that are defed but not used in this
|
// Update liveness. Registers that are defed but not used in this
|
||||||
// instruction are now dead. Mark register and all subregs as they
|
// instruction are now dead. Mark register and all subregs as they
|
||||||
|
Loading…
x
Reference in New Issue
Block a user