diff options
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonEarlyIfConv.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonEarlyIfConv.cpp b/llvm/lib/Target/Hexagon/HexagonEarlyIfConv.cpp index 7ee2e43bf96..67af947e089 100644 --- a/llvm/lib/Target/Hexagon/HexagonEarlyIfConv.cpp +++ b/llvm/lib/Target/Hexagon/HexagonEarlyIfConv.cpp @@ -537,18 +537,16 @@ bool HexagonEarlyIfConversion::isProfitable(const FlowPattern &FP) const { // the code size. If the predicated blocks are smaller than a packet size, // approximate the spare room in the packet that could be filled with the // predicated/speculated instructions. - unsigned TS = 0, FS = 0, Spare = 0; - if (FP.TrueB) { - TS = std::distance(FP.TrueB->begin(), FP.TrueB->getFirstTerminator()); - if (TS < HEXAGON_PACKET_SIZE) - Spare += HEXAGON_PACKET_SIZE-TS; - } - if (FP.FalseB) { - FS = std::distance(FP.FalseB->begin(), FP.FalseB->getFirstTerminator()); - if (FS < HEXAGON_PACKET_SIZE) - Spare += HEXAGON_PACKET_SIZE-FS; - } - unsigned TotalIn = TS+FS; + auto TotalCount = [] (const MachineBasicBlock *B, unsigned &Spare) { + if (!B) + return 0u; + unsigned T = std::distance(B->begin(), B->getFirstTerminator()); + if (T < HEXAGON_PACKET_SIZE) + Spare += HEXAGON_PACKET_SIZE-T; + return T; + }; + unsigned Spare = 0; + unsigned TotalIn = TotalCount(FP.TrueB, Spare) + TotalCount(FP.FalseB, Spare); DEBUG(dbgs() << "Total number of instructions to be predicated/speculated: " << TotalIn << ", spare room: " << Spare << "\n"); if (TotalIn >= SizeLimit+Spare) |