diff options
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp | 18 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp | 2 |
2 files changed, 13 insertions, 7 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp b/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp index d504bf810fa..d01ff016882 100644 --- a/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp +++ b/llvm/lib/Target/Hexagon/HexagonHardwareLoops.cpp @@ -111,9 +111,7 @@ namespace { public: static char ID; - HexagonHardwareLoops() : MachineFunctionPass(ID) { - initializeHexagonHardwareLoopsPass(*PassRegistry::getPassRegistry()); - } + HexagonHardwareLoops() : MachineFunctionPass(ID) {} bool runOnMachineFunction(MachineFunction &MF) override; @@ -685,15 +683,21 @@ CountValue *HexagonHardwareLoops::getLoopTripCount(MachineLoop *L, if (InitialValue->isReg()) { unsigned R = InitialValue->getReg(); MachineBasicBlock *DefBB = MRI->getVRegDef(R)->getParent(); - if (!MDT->properlyDominates(DefBB, Header)) - return nullptr; + if (!MDT->properlyDominates(DefBB, Header)) { + int64_t V; + if (!checkForImmediate(*InitialValue, V)) + return nullptr; + } OldInsts.push_back(MRI->getVRegDef(R)); } if (EndValue->isReg()) { unsigned R = EndValue->getReg(); MachineBasicBlock *DefBB = MRI->getVRegDef(R)->getParent(); - if (!MDT->properlyDominates(DefBB, Header)) - return nullptr; + if (!MDT->properlyDominates(DefBB, Header)) { + int64_t V; + if (!checkForImmediate(*EndValue, V)) + return nullptr; + } OldInsts.push_back(MRI->getVRegDef(R)); } diff --git a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp index 6d7518a5ff3..a66e212a765 100644 --- a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp +++ b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp @@ -126,6 +126,7 @@ namespace llvm { void initializeHexagonEarlyIfConversionPass(PassRegistry&); void initializeHexagonExpandCondsetsPass(PassRegistry&); void initializeHexagonGenMuxPass(PassRegistry&); + void initializeHexagonHardwareLoopsPass(PassRegistry&); void initializeHexagonLoopIdiomRecognizePass(PassRegistry&); void initializeHexagonVectorLoopCarriedReusePass(PassRegistry&); void initializeHexagonNewValueJumpPass(PassRegistry&); @@ -184,6 +185,7 @@ extern "C" void LLVMInitializeHexagonTarget() { initializeHexagonConstExtendersPass(PR); initializeHexagonEarlyIfConversionPass(PR); initializeHexagonGenMuxPass(PR); + initializeHexagonHardwareLoopsPass(PR); initializeHexagonLoopIdiomRecognizePass(PR); initializeHexagonVectorLoopCarriedReusePass(PR); initializeHexagonNewValueJumpPass(PR); |