mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-01 16:26:29 +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:
@@ -260,12 +260,11 @@ bool MachineCSE::isCSECandidate(MachineInstr *MI) {
|
||||
return false;
|
||||
|
||||
// Ignore stuff that we obviously can't move.
|
||||
const MCInstrDesc &MCID = MI->getDesc();
|
||||
if (MCID.mayStore() || MCID.isCall() || MCID.isTerminator() ||
|
||||
if (MI->mayStore() || MI->isCall() || MI->isTerminator() ||
|
||||
MI->hasUnmodeledSideEffects())
|
||||
return false;
|
||||
|
||||
if (MCID.mayLoad()) {
|
||||
if (MI->mayLoad()) {
|
||||
// Okay, this instruction does a load. As a refinement, we allow the target
|
||||
// to decide whether the loaded value is actually a constant. If so, we can
|
||||
// actually use it as a load.
|
||||
@@ -287,7 +286,7 @@ bool MachineCSE::isProfitableToCSE(unsigned CSReg, unsigned Reg,
|
||||
// Heuristics #1: Don't CSE "cheap" computation if the def is not local or in
|
||||
// an immediate predecessor. We don't want to increase register pressure and
|
||||
// end up causing other computation to be spilled.
|
||||
if (MI->getDesc().isAsCheapAsAMove()) {
|
||||
if (MI->isAsCheapAsAMove()) {
|
||||
MachineBasicBlock *CSBB = CSMI->getParent();
|
||||
MachineBasicBlock *BB = MI->getParent();
|
||||
if (CSBB != BB && !CSBB->isSuccessor(BB))
|
||||
@@ -376,7 +375,7 @@ bool MachineCSE::ProcessBlock(MachineBasicBlock *MBB) {
|
||||
|
||||
// Commute commutable instructions.
|
||||
bool Commuted = false;
|
||||
if (!FoundCSE && MI->getDesc().isCommutable()) {
|
||||
if (!FoundCSE && MI->isCommutable()) {
|
||||
MachineInstr *NewMI = TII->commuteInstruction(MI);
|
||||
if (NewMI) {
|
||||
Commuted = true;
|
||||
|
Reference in New Issue
Block a user