[llvm-commits] [llvm] r121650 - /llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp
Wesley Peck
peckw at wesleypeck.com
Sun Dec 12 14:22:49 PST 2010
Author: peckw
Date: Sun Dec 12 16:22:49 2010
New Revision: 121650
URL: http://llvm.org/viewvc/llvm-project?rev=121650&view=rev
Log:
MBlaze delay slot filler was not capable of using ADDK and variants to fill delay slots. This broke several test cases when 121649 was committed. This fixes the regression.
Modified:
llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp
Modified: llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp?rev=121650&r1=121649&r2=121650&view=diff
==============================================================================
--- llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp (original)
+++ llvm/trunk/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp Sun Dec 12 16:22:49 2010
@@ -167,6 +167,23 @@
return (brdesc.hasDelaySlot());
}
+static bool hasUnknownSideEffects(MachineBasicBlock::iterator &I,
+ TargetInstrDesc &desc) {
+ if (!desc.hasUnmodeledSideEffects())
+ return false;
+
+ unsigned op = I->getOpcode();
+ if (op == MBlaze::ADDK || op == MBlaze::ADDIK ||
+ op == MBlaze::ADDC || op == MBlaze::ADDIC ||
+ op == MBlaze::ADDKC || op == MBlaze::ADDIKC ||
+ op == MBlaze::RSUBK || op == MBlaze::RSUBIK ||
+ op == MBlaze::RSUBC || op == MBlaze::RSUBIC ||
+ op == MBlaze::RSUBKC || op == MBlaze::RSUBIKC)
+ return false;
+
+ return true;
+}
+
static MachineBasicBlock::iterator
findDelayInstr(MachineBasicBlock &MBB,MachineBasicBlock::iterator slot) {
MachineBasicBlock::iterator I = slot;
@@ -178,7 +195,7 @@
TargetInstrDesc desc = I->getDesc();
if (desc.hasDelaySlot() || desc.isBranch() || isDelayFiller(MBB,I) ||
desc.isCall() || desc.isReturn() || desc.isBarrier() ||
- desc.hasUnmodeledSideEffects())
+ hasUnknownSideEffects(I,desc))
break;
if (hasImmInstruction(I) || delayHasHazard(I,slot))
More information about the llvm-commits
mailing list