]> granicus.if.org Git - llvm/commit
[DFAPacketizer] Allow namespacing of automata per-itinerary
authorJames Molloy <jmolloy@google.com>
Fri, 30 Aug 2019 19:50:49 +0000 (19:50 +0000)
committerJames Molloy <jmolloy@google.com>
Fri, 30 Aug 2019 19:50:49 +0000 (19:50 +0000)
commit505261e1643ca5dea6d2cc38c92e2e2ed69385f0
treec0697580c66474f9a6c47522a7f0e6a0df42cd78
parent4f2f68506475610d66456bde43fd369c0c46345a
[DFAPacketizer] Allow namespacing of automata per-itinerary

The Hexagon itineraries are cunningly crafted such that functional units between
itineraries do not clash. Because all itineraries are bundled into the same DFA,
a functional unit index clash would cause an incorrect DFA to be generated.

A workaround for this is to ensure all itineraries declare the universe of all
possible functional units, but this isn't ideal for three reasons:
  1) We only have a limited number of FUs we can encode in the packetizer, and
     using the universe causes us to hit the limit without care.
  2) Silent codegen faults are bad, and careful triage of the FU list shouldn't
     be required.
  3) Smooshing all itineraries into the same automaton allows combinations of
     instruction classes that cannot exist, which bloats the table.

A simple solution is to allow "namespacing" packetizers.

Differential Revision: https://reviews.llvm.org/D66940

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370508 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Target/TargetItinerary.td
utils/TableGen/DFAPacketizerEmitter.cpp