From: Wesley Peck Date: Sun, 12 Dec 2010 22:22:49 +0000 (+0000) Subject: MBlaze delay slot filler was not capable of using ADDK and variants to fill delay... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=8f40b24ca13940ece7c401b73b902c05a4ee4481;p=oota-llvm.git 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121650 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp b/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp index 024d3d55fcc..1073532c30e 100644 --- a/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp +++ b/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp @@ -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))