diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-03-23 20:41:44 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-03-23 20:41:44 +0000 |
commit | 8038dad7dbdf456adbdc2151045acfd9efb86736 (patch) | |
tree | 3f50176f10f9130270b019a9b9c7d64f60c1b3d0 /llvm/lib | |
parent | 6b2d5950d391e8e8eb4ada2febf77cb287b3ad40 (diff) | |
download | bcm5719-llvm-8038dad7dbdf456adbdc2151045acfd9efb86736.tar.gz bcm5719-llvm-8038dad7dbdf456adbdc2151045acfd9efb86736.zip |
[Hexagon] Correct update of instruction offet in HW loop fixup
llvm-svn: 328366
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonFixupHwLoops.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonFixupHwLoops.cpp b/llvm/lib/Target/Hexagon/HexagonFixupHwLoops.cpp index a842b672736..a6b9bcb405d 100644 --- a/llvm/lib/Target/Hexagon/HexagonFixupHwLoops.cpp +++ b/llvm/lib/Target/Hexagon/HexagonFixupHwLoops.cpp @@ -20,6 +20,7 @@ #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/TargetInstrInfo.h" +#include "llvm/Support/MathExtras.h" #include "llvm/PassSupport.h" using namespace llvm; @@ -137,7 +138,7 @@ bool HexagonFixupHwLoops::fixupLoopInstrs(MachineFunction &MF) { MachineBasicBlock::iterator MII = MBB.begin(); MachineBasicBlock::iterator MIE = MBB.end(); while (MII != MIE) { - InstOffset += HII->getSize(*MII); + unsigned InstSize = HII->getSize(*MII); if (MII->isMetaInstruction()) { ++MII; continue; @@ -145,8 +146,10 @@ bool HexagonFixupHwLoops::fixupLoopInstrs(MachineFunction &MF) { if (isHardwareLoop(*MII)) { assert(MII->getOperand(0).isMBB() && "Expect a basic block as loop operand"); - int diff = InstOffset - BlockToInstOffset[MII->getOperand(0).getMBB()]; - if ((unsigned)abs(diff) > MaxLoopRange) { + MachineBasicBlock *TargetBB = MII->getOperand(0).getMBB(); + unsigned Diff = AbsoluteDifference(InstOffset, + BlockToInstOffset[TargetBB]); + if (Diff > MaxLoopRange) { useExtLoopInstr(MF, MII); MII = MBB.erase(MII); Changed = true; @@ -156,6 +159,7 @@ bool HexagonFixupHwLoops::fixupLoopInstrs(MachineFunction &MF) { } else { ++MII; } + InstOffset += InstSize; } } |