[Hexagon] Don't ignore mult-cycle latency information
The compiler was generating code that ends up ignoring a multiple latency dependence between two instructions by scheduling the intructions in back-to-back packets. The packetizer needs to end a packet if the latency of the current current insruction and the source in the previous packet is greater than 1 cycle. This case occurs when there is still room in the current packet, but scheduling the instruction causes a stall. Instead, the packetizer should start a new packet. Also, if the current packet already contains a stall, then it is okay to add another instruction to the packet that also causes a stall. This occurs when there are no instructions that can be scheduled in between the producer and consumer instructions. This patch changes the latency for loads to 2 cycles from 3 cycles. This change refects that a load only needs to be separated by one extra packet to eliminate the stall. Patch by Ikhlas Ajbar. llvm-svn: 301954
Showing
- llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp 4 additions, 8 deletionsllvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
- llvm/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp 22 additions, 7 deletionsllvm/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp
- llvm/lib/Target/Hexagon/HexagonVLIWPacketizer.h 4 additions, 0 deletionsllvm/lib/Target/Hexagon/HexagonVLIWPacketizer.h
- llvm/test/CodeGen/Hexagon/multi-cycle.ll 103 additions, 0 deletionsllvm/test/CodeGen/Hexagon/multi-cycle.ll
Loading
Please register or sign in to comment