mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 22:23:10 +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:
@@ -643,8 +643,7 @@ bool RegisterCoalescer::RemoveCopyByCommutingDef(const CoalescerPair &CP,
|
||||
MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def);
|
||||
if (!DefMI)
|
||||
return false;
|
||||
const MCInstrDesc &MCID = DefMI->getDesc();
|
||||
if (!MCID.isCommutable())
|
||||
if (!DefMI->isCommutable())
|
||||
return false;
|
||||
// If DefMI is a two-address instruction then commuting it will change the
|
||||
// destination register.
|
||||
@@ -802,14 +801,14 @@ bool RegisterCoalescer::ReMaterializeTrivialDef(LiveInterval &SrcInt,
|
||||
if (!DefMI)
|
||||
return false;
|
||||
assert(DefMI && "Defining instruction disappeared");
|
||||
const MCInstrDesc &MCID = DefMI->getDesc();
|
||||
if (!MCID.isAsCheapAsAMove())
|
||||
if (!DefMI->isAsCheapAsAMove())
|
||||
return false;
|
||||
if (!TII->isTriviallyReMaterializable(DefMI, AA))
|
||||
return false;
|
||||
bool SawStore = false;
|
||||
if (!DefMI->isSafeToMove(TII, AA, SawStore))
|
||||
return false;
|
||||
const MCInstrDesc &MCID = DefMI->getDesc();
|
||||
if (MCID.getNumDefs() != 1)
|
||||
return false;
|
||||
if (!DefMI->isImplicitDef()) {
|
||||
|
||||
Reference in New Issue
Block a user