mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
Add bundle aware API for querying instruction properties and switch the code
generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API. For properties like mayLoad / mayStore, look into the bundle and if any of the bundled instructions has the property it would return true. For properties like isPredicable, only return true if *all* of the bundled instructions have the property. For properties like canFoldAsLoad, isCompare, conservatively return false for bundles. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146026 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -432,10 +432,9 @@ static unsigned EstimateRuntime(MachineBasicBlock::iterator I,
|
||||
for (; I != E; ++I) {
|
||||
if (I->isDebugValue())
|
||||
continue;
|
||||
const MCInstrDesc &MCID = I->getDesc();
|
||||
if (MCID.isCall())
|
||||
if (I->isCall())
|
||||
Time += 10;
|
||||
else if (MCID.mayLoad() || MCID.mayStore())
|
||||
else if (I->mayLoad() || I->mayStore())
|
||||
Time += 2;
|
||||
else
|
||||
++Time;
|
||||
@@ -502,7 +501,7 @@ static unsigned CountTerminators(MachineBasicBlock *MBB,
|
||||
break;
|
||||
}
|
||||
--I;
|
||||
if (!I->getDesc().isTerminator()) break;
|
||||
if (!I->isTerminator()) break;
|
||||
++NumTerms;
|
||||
}
|
||||
return NumTerms;
|
||||
@@ -550,8 +549,8 @@ static bool ProfitableToMerge(MachineBasicBlock *MBB1,
|
||||
// heuristics.
|
||||
unsigned EffectiveTailLen = CommonTailLen;
|
||||
if (SuccBB && MBB1 != PredBB && MBB2 != PredBB &&
|
||||
!MBB1->back().getDesc().isBarrier() &&
|
||||
!MBB2->back().getDesc().isBarrier())
|
||||
!MBB1->back().isBarrier() &&
|
||||
!MBB2->back().isBarrier())
|
||||
++EffectiveTailLen;
|
||||
|
||||
// Check if the common tail is long enough to be worthwhile.
|
||||
@@ -983,7 +982,7 @@ static bool IsBranchOnlyBlock(MachineBasicBlock *MBB) {
|
||||
if (!MBBI->isDebugValue())
|
||||
break;
|
||||
}
|
||||
return (MBBI->getDesc().isBranch());
|
||||
return (MBBI->isBranch());
|
||||
}
|
||||
|
||||
/// IsBetterFallthrough - Return true if it would be clearly better to
|
||||
@@ -1011,7 +1010,7 @@ static bool IsBetterFallthrough(MachineBasicBlock *MBB1,
|
||||
MachineBasicBlock::iterator MBB2I = --MBB2->end();
|
||||
while (MBB2I->isDebugValue())
|
||||
--MBB2I;
|
||||
return MBB2I->getDesc().isCall() && !MBB1I->getDesc().isCall();
|
||||
return MBB2I->isCall() && !MBB1I->isCall();
|
||||
}
|
||||
|
||||
/// OptimizeBlock - Analyze and optimize control flow related to the specified
|
||||
|
||||
Reference in New Issue
Block a user