diff options
author | Wesley Peck <peckw@wesleypeck.com> | 2010-12-12 22:22:49 +0000 |
---|---|---|
committer | Wesley Peck <peckw@wesleypeck.com> | 2010-12-12 22:22:49 +0000 |
commit | 8f40b24ca13940ece7c401b73b902c05a4ee4481 (patch) | |
tree | e8165e588989152f42b74993e461d9e55428f87d /lib | |
parent | a7c7b9dccba2c14a93f0f9a29490f1df4f9b4080 (diff) |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp b/lib/Target/MBlaze/MBlazeDelaySlotFiller.cpp index 024d3d55fc..1073532c30 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)) |