MBlaze delay slot filler was not capable of using ADDK and variants to fill delay...
authorWesley Peck <peckw@wesleypeck.com>
Sun, 12 Dec 2010 22:22:49 +0000 (22:22 +0000)
committerWesley Peck <peckw@wesleypeck.com>
Sun, 12 Dec 2010 22:22:49 +0000 (22:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121650 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp

index 024d3d55fcc5631486f5cb475b1bb50a0a721d74..1073532c30eb1586f2df946e7bb79527fc226d00 100644 (file)
@@ -167,6 +167,23 @@ static bool isDelayFiller(MachineBasicBlock &MBB,
   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 @@ findDelayInstr(MachineBasicBlock &MBB,MachineBasicBlock::iterator slot) {
     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))