[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