diff options
Diffstat (limited to 'lib/Target/Hexagon/HexagonFixupHwLoops.cpp')
-rw-r--r-- | lib/Target/Hexagon/HexagonFixupHwLoops.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/Target/Hexagon/HexagonFixupHwLoops.cpp b/lib/Target/Hexagon/HexagonFixupHwLoops.cpp index d0c7f9c8960f..3de817cc8fb6 100644 --- a/lib/Target/Hexagon/HexagonFixupHwLoops.cpp +++ b/lib/Target/Hexagon/HexagonFixupHwLoops.cpp @@ -45,6 +45,11 @@ namespace { bool runOnMachineFunction(MachineFunction &MF) override; + MachineFunctionProperties getRequiredProperties() const override { + return MachineFunctionProperties().set( + MachineFunctionProperties::Property::AllVRegsAllocated); + } + const char *getPassName() const override { return "Hexagon Hardware Loop Fixup"; } @@ -77,14 +82,16 @@ FunctionPass *llvm::createHexagonFixupHwLoops() { } /// \brief Returns true if the instruction is a hardware loop instruction. -static bool isHardwareLoop(const MachineInstr *MI) { - return MI->getOpcode() == Hexagon::J2_loop0r || - MI->getOpcode() == Hexagon::J2_loop0i || - MI->getOpcode() == Hexagon::J2_loop1r || - MI->getOpcode() == Hexagon::J2_loop1i; +static bool isHardwareLoop(const MachineInstr &MI) { + return MI.getOpcode() == Hexagon::J2_loop0r || + MI.getOpcode() == Hexagon::J2_loop0i || + MI.getOpcode() == Hexagon::J2_loop1r || + MI.getOpcode() == Hexagon::J2_loop1i; } bool HexagonFixupHwLoops::runOnMachineFunction(MachineFunction &MF) { + if (skipFunction(*MF.getFunction())) + return false; return fixupLoopInstrs(MF); } @@ -123,7 +130,6 @@ bool HexagonFixupHwLoops::fixupLoopInstrs(MachineFunction &MF) { // Second pass - check each loop instruction to see if it needs to be // converted. - InstOffset = 0; bool Changed = false; for (MachineBasicBlock &MBB : MF) { InstOffset = BlockToInstOffset[&MBB]; @@ -137,7 +143,7 @@ bool HexagonFixupHwLoops::fixupLoopInstrs(MachineFunction &MF) { ++MII; continue; } - if (isHardwareLoop(MII)) { + if (isHardwareLoop(*MII)) { assert(MII->getOperand(0).isMBB() && "Expect a basic block as loop operand"); int diff = InstOffset - BlockToInstOffset[MII->getOperand(0).getMBB()]; |