1. [DFAPacketizer] Allow up to 64 functional units (details)
Commit 39525a6723854e9920b2560aadaa399cfbbd006a by James Molloy jmolloy
[DFAPacketizer] Allow up to 64 functional units
Summary: To drive the automaton we used a uint64_t as an action type.
This contained the transition's resource requirements as a conjunction:
  (a OR b) AND (b OR c)
We encoded this conjunction as a sequence of four 16-bit bitmasks. This
limited the number of addressable functional units to 16, which is quite
low and has bitten many people in the past.
Instead, the DFAEmitter now generates a lookup table from InstrItinerary
class (index of the ItinData inside the ProcItineraries) to an internal
action index which is essentially a dense embedding of the conjunctive
form. Because we never materialize the conjunctive form, we no longer
have the 16 FU restriction.
In this patch we limit to 64 functional units due to using a uint64_t
bitmask in the DFAEmitter. Now that we've decoupled these
representations we can increase this in future.
Reviewers: ThomasRaoux, kparzysz, majnemer
Reviewed By: ThomasRaoux
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision:
The file was modifiedllvm/include/llvm/CodeGen/DFAPacketizer.h
The file was modifiedllvm/utils/TableGen/DFAPacketizerEmitter.cpp
The file was modifiedllvm/lib/CodeGen/DFAPacketizer.cpp