mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +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:
@@ -1472,19 +1472,18 @@ static bool IsSafeAndProfitableToMove(bool isLd, unsigned Base,
|
||||
while (++I != E) {
|
||||
if (I->isDebugValue() || MemOps.count(&*I))
|
||||
continue;
|
||||
const MCInstrDesc &MCID = I->getDesc();
|
||||
if (MCID.isCall() || MCID.isTerminator() || I->hasUnmodeledSideEffects())
|
||||
if (I->isCall() || I->isTerminator() || I->hasUnmodeledSideEffects())
|
||||
return false;
|
||||
if (isLd && MCID.mayStore())
|
||||
if (isLd && I->mayStore())
|
||||
return false;
|
||||
if (!isLd) {
|
||||
if (MCID.mayLoad())
|
||||
if (I->mayLoad())
|
||||
return false;
|
||||
// It's not safe to move the first 'str' down.
|
||||
// str r1, [r0]
|
||||
// strh r5, [r0]
|
||||
// str r4, [r0, #+4]
|
||||
if (MCID.mayStore())
|
||||
if (I->mayStore())
|
||||
return false;
|
||||
}
|
||||
for (unsigned j = 0, NumOps = I->getNumOperands(); j != NumOps; ++j) {
|
||||
@@ -1774,8 +1773,7 @@ ARMPreAllocLoadStoreOpt::RescheduleLoadStoreInstrs(MachineBasicBlock *MBB) {
|
||||
while (MBBI != E) {
|
||||
for (; MBBI != E; ++MBBI) {
|
||||
MachineInstr *MI = MBBI;
|
||||
const MCInstrDesc &MCID = MI->getDesc();
|
||||
if (MCID.isCall() || MCID.isTerminator()) {
|
||||
if (MI->isCall() || MI->isTerminator()) {
|
||||
// Stop at barriers.
|
||||
++MBBI;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user