1 //===------------ FixedLenDecoderEmitter.cpp - Decoder Generator ----------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // It contains the tablegen backend that emits the decoder functions for
10 // targets with fixed length instruction set.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenInstruction.h"
15 #include "CodeGenTarget.h"
16 #include "InfoByHwMode.h"
17 #include "llvm/ADT/APInt.h"
18 #include "llvm/ADT/ArrayRef.h"
19 #include "llvm/ADT/CachedHashString.h"
20 #include "llvm/ADT/STLExtras.h"
21 #include "llvm/ADT/SetVector.h"
22 #include "llvm/ADT/SmallString.h"
23 #include "llvm/ADT/Statistic.h"
24 #include "llvm/ADT/StringExtras.h"
25 #include "llvm/ADT/StringRef.h"
26 #include "llvm/MC/MCFixedLenDisassembler.h"
27 #include "llvm/Support/Casting.h"
28 #include "llvm/Support/Debug.h"
29 #include "llvm/Support/ErrorHandling.h"
30 #include "llvm/Support/FormattedStream.h"
31 #include "llvm/Support/LEB128.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include "llvm/TableGen/Error.h"
34 #include "llvm/TableGen/Record.h"
35 #include <algorithm>
36 #include <cassert>
37 #include <cstddef>
38 #include <cstdint>
39 #include <map>
40 #include <memory>
41 #include <set>
42 #include <string>
43 #include <utility>
44 #include <vector>
45 
46 using namespace llvm;
47 
48 #define DEBUG_TYPE "decoder-emitter"
49 
50 namespace {
51 
52 STATISTIC(NumEncodings, "Number of encodings considered");
53 STATISTIC(NumEncodingsLackingDisasm, "Number of encodings without disassembler info");
54 STATISTIC(NumInstructions, "Number of instructions considered");
55 STATISTIC(NumEncodingsSupported, "Number of encodings supported");
56 STATISTIC(NumEncodingsOmitted, "Number of encodings omitted");
57 
58 struct EncodingField {
59   unsigned Base, Width, Offset;
EncodingField__anon21163f150111::EncodingField60   EncodingField(unsigned B, unsigned W, unsigned O)
61     : Base(B), Width(W), Offset(O) { }
62 };
63 
64 struct OperandInfo {
65   std::vector<EncodingField> Fields;
66   std::string Decoder;
67   bool HasCompleteDecoder;
68   uint64_t InitValue;
69 
OperandInfo__anon21163f150111::OperandInfo70   OperandInfo(std::string D, bool HCD)
71       : Decoder(std::move(D)), HasCompleteDecoder(HCD), InitValue(0) {}
72 
addField__anon21163f150111::OperandInfo73   void addField(unsigned Base, unsigned Width, unsigned Offset) {
74     Fields.push_back(EncodingField(Base, Width, Offset));
75   }
76 
numFields__anon21163f150111::OperandInfo77   unsigned numFields() const { return Fields.size(); }
78 
79   typedef std::vector<EncodingField>::const_iterator const_iterator;
80 
begin__anon21163f150111::OperandInfo81   const_iterator begin() const { return Fields.begin(); }
end__anon21163f150111::OperandInfo82   const_iterator end() const   { return Fields.end();   }
83 };
84 
85 typedef std::vector<uint8_t> DecoderTable;
86 typedef uint32_t DecoderFixup;
87 typedef std::vector<DecoderFixup> FixupList;
88 typedef std::vector<FixupList> FixupScopeList;
89 typedef SmallSetVector<CachedHashString, 16> PredicateSet;
90 typedef SmallSetVector<CachedHashString, 16> DecoderSet;
91 struct DecoderTableInfo {
92   DecoderTable Table;
93   FixupScopeList FixupStack;
94   PredicateSet Predicates;
95   DecoderSet Decoders;
96 };
97 
98 struct EncodingAndInst {
99   const Record *EncodingDef;
100   const CodeGenInstruction *Inst;
101   StringRef HwModeName;
102 
EncodingAndInst__anon21163f150111::EncodingAndInst103   EncodingAndInst(const Record *EncodingDef, const CodeGenInstruction *Inst,
104                   StringRef HwModeName = "")
105       : EncodingDef(EncodingDef), Inst(Inst), HwModeName(HwModeName) {}
106 };
107 
108 struct EncodingIDAndOpcode {
109   unsigned EncodingID;
110   unsigned Opcode;
111 
EncodingIDAndOpcode__anon21163f150111::EncodingIDAndOpcode112   EncodingIDAndOpcode() : EncodingID(0), Opcode(0) {}
EncodingIDAndOpcode__anon21163f150111::EncodingIDAndOpcode113   EncodingIDAndOpcode(unsigned EncodingID, unsigned Opcode)
114       : EncodingID(EncodingID), Opcode(Opcode) {}
115 };
116 
operator <<(raw_ostream & OS,const EncodingAndInst & Value)117 raw_ostream &operator<<(raw_ostream &OS, const EncodingAndInst &Value) {
118   if (Value.EncodingDef != Value.Inst->TheDef)
119     OS << Value.EncodingDef->getName() << ":";
120   OS << Value.Inst->TheDef->getName();
121   return OS;
122 }
123 
124 class FixedLenDecoderEmitter {
125   RecordKeeper &RK;
126   std::vector<EncodingAndInst> NumberedEncodings;
127 
128 public:
129   // Defaults preserved here for documentation, even though they aren't
130   // strictly necessary given the way that this is currently being called.
FixedLenDecoderEmitter(RecordKeeper & R,std::string PredicateNamespace,std::string GPrefix="if (",std::string GPostfix=" == MCDisassembler::Fail)",std::string ROK="MCDisassembler::Success",std::string RFail="MCDisassembler::Fail",std::string L="")131   FixedLenDecoderEmitter(RecordKeeper &R, std::string PredicateNamespace,
132                          std::string GPrefix = "if (",
133                          std::string GPostfix = " == MCDisassembler::Fail)",
134                          std::string ROK = "MCDisassembler::Success",
135                          std::string RFail = "MCDisassembler::Fail",
136                          std::string L = "")
137       : RK(R), Target(R), PredicateNamespace(std::move(PredicateNamespace)),
138         GuardPrefix(std::move(GPrefix)), GuardPostfix(std::move(GPostfix)),
139         ReturnOK(std::move(ROK)), ReturnFail(std::move(RFail)),
140         Locals(std::move(L)) {}
141 
142   // Emit the decoder state machine table.
143   void emitTable(formatted_raw_ostream &o, DecoderTable &Table,
144                  unsigned Indentation, unsigned BitWidth,
145                  StringRef Namespace) const;
146   void emitPredicateFunction(formatted_raw_ostream &OS,
147                              PredicateSet &Predicates,
148                              unsigned Indentation) const;
149   void emitDecoderFunction(formatted_raw_ostream &OS,
150                            DecoderSet &Decoders,
151                            unsigned Indentation) const;
152 
153   // run - Output the code emitter
154   void run(raw_ostream &o);
155 
156 private:
157   CodeGenTarget Target;
158 
159 public:
160   std::string PredicateNamespace;
161   std::string GuardPrefix, GuardPostfix;
162   std::string ReturnOK, ReturnFail;
163   std::string Locals;
164 };
165 
166 } // end anonymous namespace
167 
168 // The set (BIT_TRUE, BIT_FALSE, BIT_UNSET) represents a ternary logic system
169 // for a bit value.
170 //
171 // BIT_UNFILTERED is used as the init value for a filter position.  It is used
172 // only for filter processings.
173 typedef enum {
174   BIT_TRUE,      // '1'
175   BIT_FALSE,     // '0'
176   BIT_UNSET,     // '?'
177   BIT_UNFILTERED // unfiltered
178 } bit_value_t;
179 
ValueSet(bit_value_t V)180 static bool ValueSet(bit_value_t V) {
181   return (V == BIT_TRUE || V == BIT_FALSE);
182 }
183 
ValueNotSet(bit_value_t V)184 static bool ValueNotSet(bit_value_t V) {
185   return (V == BIT_UNSET);
186 }
187 
Value(bit_value_t V)188 static int Value(bit_value_t V) {
189   return ValueNotSet(V) ? -1 : (V == BIT_FALSE ? 0 : 1);
190 }
191 
bitFromBits(const BitsInit & bits,unsigned index)192 static bit_value_t bitFromBits(const BitsInit &bits, unsigned index) {
193   if (BitInit *bit = dyn_cast<BitInit>(bits.getBit(index)))
194     return bit->getValue() ? BIT_TRUE : BIT_FALSE;
195 
196   // The bit is uninitialized.
197   return BIT_UNSET;
198 }
199 
200 // Prints the bit value for each position.
dumpBits(raw_ostream & o,const BitsInit & bits)201 static void dumpBits(raw_ostream &o, const BitsInit &bits) {
202   for (unsigned index = bits.getNumBits(); index > 0; --index) {
203     switch (bitFromBits(bits, index - 1)) {
204     case BIT_TRUE:
205       o << "1";
206       break;
207     case BIT_FALSE:
208       o << "0";
209       break;
210     case BIT_UNSET:
211       o << "_";
212       break;
213     default:
214       llvm_unreachable("unexpected return value from bitFromBits");
215     }
216   }
217 }
218 
getBitsField(const Record & def,StringRef str)219 static BitsInit &getBitsField(const Record &def, StringRef str) {
220   BitsInit *bits = def.getValueAsBitsInit(str);
221   return *bits;
222 }
223 
224 // Representation of the instruction to work on.
225 typedef std::vector<bit_value_t> insn_t;
226 
227 namespace {
228 
229 static const uint64_t NO_FIXED_SEGMENTS_SENTINEL = -1ULL;
230 
231 class FilterChooser;
232 
233 /// Filter - Filter works with FilterChooser to produce the decoding tree for
234 /// the ISA.
235 ///
236 /// It is useful to think of a Filter as governing the switch stmts of the
237 /// decoding tree in a certain level.  Each case stmt delegates to an inferior
238 /// FilterChooser to decide what further decoding logic to employ, or in another
239 /// words, what other remaining bits to look at.  The FilterChooser eventually
240 /// chooses a best Filter to do its job.
241 ///
242 /// This recursive scheme ends when the number of Opcodes assigned to the
243 /// FilterChooser becomes 1 or if there is a conflict.  A conflict happens when
244 /// the Filter/FilterChooser combo does not know how to distinguish among the
245 /// Opcodes assigned.
246 ///
247 /// An example of a conflict is
248 ///
249 /// Conflict:
250 ///                     111101000.00........00010000....
251 ///                     111101000.00........0001........
252 ///                     1111010...00........0001........
253 ///                     1111010...00....................
254 ///                     1111010.........................
255 ///                     1111............................
256 ///                     ................................
257 ///     VST4q8a         111101000_00________00010000____
258 ///     VST4q8b         111101000_00________00010000____
259 ///
260 /// The Debug output shows the path that the decoding tree follows to reach the
261 /// the conclusion that there is a conflict.  VST4q8a is a vst4 to double-spaced
262 /// even registers, while VST4q8b is a vst4 to double-spaced odd registers.
263 ///
264 /// The encoding info in the .td files does not specify this meta information,
265 /// which could have been used by the decoder to resolve the conflict.  The
266 /// decoder could try to decode the even/odd register numbering and assign to
267 /// VST4q8a or VST4q8b, but for the time being, the decoder chooses the "a"
268 /// version and return the Opcode since the two have the same Asm format string.
269 class Filter {
270 protected:
271   const FilterChooser *Owner;// points to the FilterChooser who owns this filter
272   unsigned StartBit; // the starting bit position
273   unsigned NumBits; // number of bits to filter
274   bool Mixed; // a mixed region contains both set and unset bits
275 
276   // Map of well-known segment value to the set of uid's with that value.
277   std::map<uint64_t, std::vector<EncodingIDAndOpcode>>
278       FilteredInstructions;
279 
280   // Set of uid's with non-constant segment values.
281   std::vector<EncodingIDAndOpcode> VariableInstructions;
282 
283   // Map of well-known segment value to its delegate.
284   std::map<uint64_t, std::unique_ptr<const FilterChooser>> FilterChooserMap;
285 
286   // Number of instructions which fall under FilteredInstructions category.
287   unsigned NumFiltered;
288 
289   // Keeps track of the last opcode in the filtered bucket.
290   EncodingIDAndOpcode LastOpcFiltered;
291 
292 public:
293   Filter(Filter &&f);
294   Filter(FilterChooser &owner, unsigned startBit, unsigned numBits, bool mixed);
295 
296   ~Filter() = default;
297 
getNumFiltered() const298   unsigned getNumFiltered() const { return NumFiltered; }
299 
getSingletonOpc() const300   EncodingIDAndOpcode getSingletonOpc() const {
301     assert(NumFiltered == 1);
302     return LastOpcFiltered;
303   }
304 
305   // Return the filter chooser for the group of instructions without constant
306   // segment values.
getVariableFC() const307   const FilterChooser &getVariableFC() const {
308     assert(NumFiltered == 1);
309     assert(FilterChooserMap.size() == 1);
310     return *(FilterChooserMap.find(NO_FIXED_SEGMENTS_SENTINEL)->second);
311   }
312 
313   // Divides the decoding task into sub tasks and delegates them to the
314   // inferior FilterChooser's.
315   //
316   // A special case arises when there's only one entry in the filtered
317   // instructions.  In order to unambiguously decode the singleton, we need to
318   // match the remaining undecoded encoding bits against the singleton.
319   void recurse();
320 
321   // Emit table entries to decode instructions given a segment or segments of
322   // bits.
323   void emitTableEntry(DecoderTableInfo &TableInfo) const;
324 
325   // Returns the number of fanout produced by the filter.  More fanout implies
326   // the filter distinguishes more categories of instructions.
327   unsigned usefulness() const;
328 }; // end class Filter
329 
330 } // end anonymous namespace
331 
332 // These are states of our finite state machines used in FilterChooser's
333 // filterProcessor() which produces the filter candidates to use.
334 typedef enum {
335   ATTR_NONE,
336   ATTR_FILTERED,
337   ATTR_ALL_SET,
338   ATTR_ALL_UNSET,
339   ATTR_MIXED
340 } bitAttr_t;
341 
342 /// FilterChooser - FilterChooser chooses the best filter among a set of Filters
343 /// in order to perform the decoding of instructions at the current level.
344 ///
345 /// Decoding proceeds from the top down.  Based on the well-known encoding bits
346 /// of instructions available, FilterChooser builds up the possible Filters that
347 /// can further the task of decoding by distinguishing among the remaining
348 /// candidate instructions.
349 ///
350 /// Once a filter has been chosen, it is called upon to divide the decoding task
351 /// into sub-tasks and delegates them to its inferior FilterChoosers for further
352 /// processings.
353 ///
354 /// It is useful to think of a Filter as governing the switch stmts of the
355 /// decoding tree.  And each case is delegated to an inferior FilterChooser to
356 /// decide what further remaining bits to look at.
357 namespace {
358 
359 class FilterChooser {
360 protected:
361   friend class Filter;
362 
363   // Vector of codegen instructions to choose our filter.
364   ArrayRef<EncodingAndInst> AllInstructions;
365 
366   // Vector of uid's for this filter chooser to work on.
367   // The first member of the pair is the opcode id being decoded, the second is
368   // the opcode id that should be emitted.
369   const std::vector<EncodingIDAndOpcode> &Opcodes;
370 
371   // Lookup table for the operand decoding of instructions.
372   const std::map<unsigned, std::vector<OperandInfo>> &Operands;
373 
374   // Vector of candidate filters.
375   std::vector<Filter> Filters;
376 
377   // Array of bit values passed down from our parent.
378   // Set to all BIT_UNFILTERED's for Parent == NULL.
379   std::vector<bit_value_t> FilterBitValues;
380 
381   // Links to the FilterChooser above us in the decoding tree.
382   const FilterChooser *Parent;
383 
384   // Index of the best filter from Filters.
385   int BestIndex;
386 
387   // Width of instructions
388   unsigned BitWidth;
389 
390   // Parent emitter
391   const FixedLenDecoderEmitter *Emitter;
392 
393 public:
FilterChooser(ArrayRef<EncodingAndInst> Insts,const std::vector<EncodingIDAndOpcode> & IDs,const std::map<unsigned,std::vector<OperandInfo>> & Ops,unsigned BW,const FixedLenDecoderEmitter * E)394   FilterChooser(ArrayRef<EncodingAndInst> Insts,
395                 const std::vector<EncodingIDAndOpcode> &IDs,
396                 const std::map<unsigned, std::vector<OperandInfo>> &Ops,
397                 unsigned BW, const FixedLenDecoderEmitter *E)
398       : AllInstructions(Insts), Opcodes(IDs), Operands(Ops),
399         FilterBitValues(BW, BIT_UNFILTERED), Parent(nullptr), BestIndex(-1),
400         BitWidth(BW), Emitter(E) {
401     doFilter();
402   }
403 
FilterChooser(ArrayRef<EncodingAndInst> Insts,const std::vector<EncodingIDAndOpcode> & IDs,const std::map<unsigned,std::vector<OperandInfo>> & Ops,const std::vector<bit_value_t> & ParentFilterBitValues,const FilterChooser & parent)404   FilterChooser(ArrayRef<EncodingAndInst> Insts,
405                 const std::vector<EncodingIDAndOpcode> &IDs,
406                 const std::map<unsigned, std::vector<OperandInfo>> &Ops,
407                 const std::vector<bit_value_t> &ParentFilterBitValues,
408                 const FilterChooser &parent)
409       : AllInstructions(Insts), Opcodes(IDs), Operands(Ops),
410         FilterBitValues(ParentFilterBitValues), Parent(&parent), BestIndex(-1),
411         BitWidth(parent.BitWidth), Emitter(parent.Emitter) {
412     doFilter();
413   }
414 
415   FilterChooser(const FilterChooser &) = delete;
416   void operator=(const FilterChooser &) = delete;
417 
getBitWidth() const418   unsigned getBitWidth() const { return BitWidth; }
419 
420 protected:
421   // Populates the insn given the uid.
insnWithID(insn_t & Insn,unsigned Opcode) const422   void insnWithID(insn_t &Insn, unsigned Opcode) const {
423     BitsInit &Bits = getBitsField(*AllInstructions[Opcode].EncodingDef, "Inst");
424 
425     // We may have a SoftFail bitmask, which specifies a mask where an encoding
426     // may differ from the value in "Inst" and yet still be valid, but the
427     // disassembler should return SoftFail instead of Success.
428     //
429     // This is used for marking UNPREDICTABLE instructions in the ARM world.
430     BitsInit *SFBits =
431         AllInstructions[Opcode].EncodingDef->getValueAsBitsInit("SoftFail");
432 
433     for (unsigned i = 0; i < BitWidth; ++i) {
434       if (SFBits && bitFromBits(*SFBits, i) == BIT_TRUE)
435         Insn.push_back(BIT_UNSET);
436       else
437         Insn.push_back(bitFromBits(Bits, i));
438     }
439   }
440 
441   // Emit the name of the encoding/instruction pair.
emitNameWithID(raw_ostream & OS,unsigned Opcode) const442   void emitNameWithID(raw_ostream &OS, unsigned Opcode) const {
443     const Record *EncodingDef = AllInstructions[Opcode].EncodingDef;
444     const Record *InstDef = AllInstructions[Opcode].Inst->TheDef;
445     if (EncodingDef != InstDef)
446       OS << EncodingDef->getName() << ":";
447     OS << InstDef->getName();
448   }
449 
450   // Populates the field of the insn given the start position and the number of
451   // consecutive bits to scan for.
452   //
453   // Returns false if there exists any uninitialized bit value in the range.
454   // Returns true, otherwise.
455   bool fieldFromInsn(uint64_t &Field, insn_t &Insn, unsigned StartBit,
456                      unsigned NumBits) const;
457 
458   /// dumpFilterArray - dumpFilterArray prints out debugging info for the given
459   /// filter array as a series of chars.
460   void dumpFilterArray(raw_ostream &o,
461                        const std::vector<bit_value_t> & filter) const;
462 
463   /// dumpStack - dumpStack traverses the filter chooser chain and calls
464   /// dumpFilterArray on each filter chooser up to the top level one.
465   void dumpStack(raw_ostream &o, const char *prefix) const;
466 
bestFilter()467   Filter &bestFilter() {
468     assert(BestIndex != -1 && "BestIndex not set");
469     return Filters[BestIndex];
470   }
471 
PositionFiltered(unsigned i) const472   bool PositionFiltered(unsigned i) const {
473     return ValueSet(FilterBitValues[i]);
474   }
475 
476   // Calculates the island(s) needed to decode the instruction.
477   // This returns a lit of undecoded bits of an instructions, for example,
478   // Inst{20} = 1 && Inst{3-0} == 0b1111 represents two islands of yet-to-be
479   // decoded bits in order to verify that the instruction matches the Opcode.
480   unsigned getIslands(std::vector<unsigned> &StartBits,
481                       std::vector<unsigned> &EndBits,
482                       std::vector<uint64_t> &FieldVals,
483                       const insn_t &Insn) const;
484 
485   // Emits code to check the Predicates member of an instruction are true.
486   // Returns true if predicate matches were emitted, false otherwise.
487   bool emitPredicateMatch(raw_ostream &o, unsigned &Indentation,
488                           unsigned Opc) const;
489 
490   bool doesOpcodeNeedPredicate(unsigned Opc) const;
491   unsigned getPredicateIndex(DecoderTableInfo &TableInfo, StringRef P) const;
492   void emitPredicateTableEntry(DecoderTableInfo &TableInfo,
493                                unsigned Opc) const;
494 
495   void emitSoftFailTableEntry(DecoderTableInfo &TableInfo,
496                               unsigned Opc) const;
497 
498   // Emits table entries to decode the singleton.
499   void emitSingletonTableEntry(DecoderTableInfo &TableInfo,
500                                EncodingIDAndOpcode Opc) const;
501 
502   // Emits code to decode the singleton, and then to decode the rest.
503   void emitSingletonTableEntry(DecoderTableInfo &TableInfo,
504                                const Filter &Best) const;
505 
506   void emitBinaryParser(raw_ostream &o, unsigned &Indentation,
507                         const OperandInfo &OpInfo,
508                         bool &OpHasCompleteDecoder) const;
509 
510   void emitDecoder(raw_ostream &OS, unsigned Indentation, unsigned Opc,
511                    bool &HasCompleteDecoder) const;
512   unsigned getDecoderIndex(DecoderSet &Decoders, unsigned Opc,
513                            bool &HasCompleteDecoder) const;
514 
515   // Assign a single filter and run with it.
516   void runSingleFilter(unsigned startBit, unsigned numBit, bool mixed);
517 
518   // reportRegion is a helper function for filterProcessor to mark a region as
519   // eligible for use as a filter region.
520   void reportRegion(bitAttr_t RA, unsigned StartBit, unsigned BitIndex,
521                     bool AllowMixed);
522 
523   // FilterProcessor scans the well-known encoding bits of the instructions and
524   // builds up a list of candidate filters.  It chooses the best filter and
525   // recursively descends down the decoding tree.
526   bool filterProcessor(bool AllowMixed, bool Greedy = true);
527 
528   // Decides on the best configuration of filter(s) to use in order to decode
529   // the instructions.  A conflict of instructions may occur, in which case we
530   // dump the conflict set to the standard error.
531   void doFilter();
532 
533 public:
534   // emitTableEntries - Emit state machine entries to decode our share of
535   // instructions.
536   void emitTableEntries(DecoderTableInfo &TableInfo) const;
537 };
538 
539 } // end anonymous namespace
540 
541 ///////////////////////////
542 //                       //
543 // Filter Implementation //
544 //                       //
545 ///////////////////////////
546 
Filter(Filter && f)547 Filter::Filter(Filter &&f)
548   : Owner(f.Owner), StartBit(f.StartBit), NumBits(f.NumBits), Mixed(f.Mixed),
549     FilteredInstructions(std::move(f.FilteredInstructions)),
550     VariableInstructions(std::move(f.VariableInstructions)),
551     FilterChooserMap(std::move(f.FilterChooserMap)), NumFiltered(f.NumFiltered),
552     LastOpcFiltered(f.LastOpcFiltered) {
553 }
554 
Filter(FilterChooser & owner,unsigned startBit,unsigned numBits,bool mixed)555 Filter::Filter(FilterChooser &owner, unsigned startBit, unsigned numBits,
556                bool mixed)
557   : Owner(&owner), StartBit(startBit), NumBits(numBits), Mixed(mixed) {
558   assert(StartBit + NumBits - 1 < Owner->BitWidth);
559 
560   NumFiltered = 0;
561   LastOpcFiltered = {0, 0};
562 
563   for (unsigned i = 0, e = Owner->Opcodes.size(); i != e; ++i) {
564     insn_t Insn;
565 
566     // Populates the insn given the uid.
567     Owner->insnWithID(Insn, Owner->Opcodes[i].EncodingID);
568 
569     uint64_t Field;
570     // Scans the segment for possibly well-specified encoding bits.
571     bool ok = Owner->fieldFromInsn(Field, Insn, StartBit, NumBits);
572 
573     if (ok) {
574       // The encoding bits are well-known.  Lets add the uid of the
575       // instruction into the bucket keyed off the constant field value.
576       LastOpcFiltered = Owner->Opcodes[i];
577       FilteredInstructions[Field].push_back(LastOpcFiltered);
578       ++NumFiltered;
579     } else {
580       // Some of the encoding bit(s) are unspecified.  This contributes to
581       // one additional member of "Variable" instructions.
582       VariableInstructions.push_back(Owner->Opcodes[i]);
583     }
584   }
585 
586   assert((FilteredInstructions.size() + VariableInstructions.size() > 0)
587          && "Filter returns no instruction categories");
588 }
589 
590 // Divides the decoding task into sub tasks and delegates them to the
591 // inferior FilterChooser's.
592 //
593 // A special case arises when there's only one entry in the filtered
594 // instructions.  In order to unambiguously decode the singleton, we need to
595 // match the remaining undecoded encoding bits against the singleton.
recurse()596 void Filter::recurse() {
597   // Starts by inheriting our parent filter chooser's filter bit values.
598   std::vector<bit_value_t> BitValueArray(Owner->FilterBitValues);
599 
600   if (!VariableInstructions.empty()) {
601     // Conservatively marks each segment position as BIT_UNSET.
602     for (unsigned bitIndex = 0; bitIndex < NumBits; ++bitIndex)
603       BitValueArray[StartBit + bitIndex] = BIT_UNSET;
604 
605     // Delegates to an inferior filter chooser for further processing on this
606     // group of instructions whose segment values are variable.
607     FilterChooserMap.insert(std::make_pair(NO_FIXED_SEGMENTS_SENTINEL,
608         std::make_unique<FilterChooser>(Owner->AllInstructions,
609             VariableInstructions, Owner->Operands, BitValueArray, *Owner)));
610   }
611 
612   // No need to recurse for a singleton filtered instruction.
613   // See also Filter::emit*().
614   if (getNumFiltered() == 1) {
615     assert(FilterChooserMap.size() == 1);
616     return;
617   }
618 
619   // Otherwise, create sub choosers.
620   for (const auto &Inst : FilteredInstructions) {
621 
622     // Marks all the segment positions with either BIT_TRUE or BIT_FALSE.
623     for (unsigned bitIndex = 0; bitIndex < NumBits; ++bitIndex) {
624       if (Inst.first & (1ULL << bitIndex))
625         BitValueArray[StartBit + bitIndex] = BIT_TRUE;
626       else
627         BitValueArray[StartBit + bitIndex] = BIT_FALSE;
628     }
629 
630     // Delegates to an inferior filter chooser for further processing on this
631     // category of instructions.
632     FilterChooserMap.insert(std::make_pair(
633         Inst.first, std::make_unique<FilterChooser>(
634                                 Owner->AllInstructions, Inst.second,
635                                 Owner->Operands, BitValueArray, *Owner)));
636   }
637 }
638 
resolveTableFixups(DecoderTable & Table,const FixupList & Fixups,uint32_t DestIdx)639 static void resolveTableFixups(DecoderTable &Table, const FixupList &Fixups,
640                                uint32_t DestIdx) {
641   // Any NumToSkip fixups in the current scope can resolve to the
642   // current location.
643   for (FixupList::const_reverse_iterator I = Fixups.rbegin(),
644                                          E = Fixups.rend();
645        I != E; ++I) {
646     // Calculate the distance from the byte following the fixup entry byte
647     // to the destination. The Target is calculated from after the 16-bit
648     // NumToSkip entry itself, so subtract two  from the displacement here
649     // to account for that.
650     uint32_t FixupIdx = *I;
651     uint32_t Delta = DestIdx - FixupIdx - 3;
652     // Our NumToSkip entries are 24-bits. Make sure our table isn't too
653     // big.
654     assert(Delta < (1u << 24));
655     Table[FixupIdx] = (uint8_t)Delta;
656     Table[FixupIdx + 1] = (uint8_t)(Delta >> 8);
657     Table[FixupIdx + 2] = (uint8_t)(Delta >> 16);
658   }
659 }
660 
661 // Emit table entries to decode instructions given a segment or segments
662 // of bits.
emitTableEntry(DecoderTableInfo & TableInfo) const663 void Filter::emitTableEntry(DecoderTableInfo &TableInfo) const {
664   TableInfo.Table.push_back(MCD::OPC_ExtractField);
665   TableInfo.Table.push_back(StartBit);
666   TableInfo.Table.push_back(NumBits);
667 
668   // A new filter entry begins a new scope for fixup resolution.
669   TableInfo.FixupStack.emplace_back();
670 
671   DecoderTable &Table = TableInfo.Table;
672 
673   size_t PrevFilter = 0;
674   bool HasFallthrough = false;
675   for (auto &Filter : FilterChooserMap) {
676     // Field value -1 implies a non-empty set of variable instructions.
677     // See also recurse().
678     if (Filter.first == NO_FIXED_SEGMENTS_SENTINEL) {
679       HasFallthrough = true;
680 
681       // Each scope should always have at least one filter value to check
682       // for.
683       assert(PrevFilter != 0 && "empty filter set!");
684       FixupList &CurScope = TableInfo.FixupStack.back();
685       // Resolve any NumToSkip fixups in the current scope.
686       resolveTableFixups(Table, CurScope, Table.size());
687       CurScope.clear();
688       PrevFilter = 0;  // Don't re-process the filter's fallthrough.
689     } else {
690       Table.push_back(MCD::OPC_FilterValue);
691       // Encode and emit the value to filter against.
692       uint8_t Buffer[16];
693       unsigned Len = encodeULEB128(Filter.first, Buffer);
694       Table.insert(Table.end(), Buffer, Buffer + Len);
695       // Reserve space for the NumToSkip entry. We'll backpatch the value
696       // later.
697       PrevFilter = Table.size();
698       Table.push_back(0);
699       Table.push_back(0);
700       Table.push_back(0);
701     }
702 
703     // We arrive at a category of instructions with the same segment value.
704     // Now delegate to the sub filter chooser for further decodings.
705     // The case may fallthrough, which happens if the remaining well-known
706     // encoding bits do not match exactly.
707     Filter.second->emitTableEntries(TableInfo);
708 
709     // Now that we've emitted the body of the handler, update the NumToSkip
710     // of the filter itself to be able to skip forward when false. Subtract
711     // two as to account for the width of the NumToSkip field itself.
712     if (PrevFilter) {
713       uint32_t NumToSkip = Table.size() - PrevFilter - 3;
714       assert(NumToSkip < (1u << 24) && "disassembler decoding table too large!");
715       Table[PrevFilter] = (uint8_t)NumToSkip;
716       Table[PrevFilter + 1] = (uint8_t)(NumToSkip >> 8);
717       Table[PrevFilter + 2] = (uint8_t)(NumToSkip >> 16);
718     }
719   }
720 
721   // Any remaining unresolved fixups bubble up to the parent fixup scope.
722   assert(TableInfo.FixupStack.size() > 1 && "fixup stack underflow!");
723   FixupScopeList::iterator Source = TableInfo.FixupStack.end() - 1;
724   FixupScopeList::iterator Dest = Source - 1;
725   llvm::append_range(*Dest, *Source);
726   TableInfo.FixupStack.pop_back();
727 
728   // If there is no fallthrough, then the final filter should get fixed
729   // up according to the enclosing scope rather than the current position.
730   if (!HasFallthrough)
731     TableInfo.FixupStack.back().push_back(PrevFilter);
732 }
733 
734 // Returns the number of fanout produced by the filter.  More fanout implies
735 // the filter distinguishes more categories of instructions.
usefulness() const736 unsigned Filter::usefulness() const {
737   if (!VariableInstructions.empty())
738     return FilteredInstructions.size();
739   else
740     return FilteredInstructions.size() + 1;
741 }
742 
743 //////////////////////////////////
744 //                              //
745 // Filterchooser Implementation //
746 //                              //
747 //////////////////////////////////
748 
749 // Emit the decoder state machine table.
emitTable(formatted_raw_ostream & OS,DecoderTable & Table,unsigned Indentation,unsigned BitWidth,StringRef Namespace) const750 void FixedLenDecoderEmitter::emitTable(formatted_raw_ostream &OS,
751                                        DecoderTable &Table,
752                                        unsigned Indentation,
753                                        unsigned BitWidth,
754                                        StringRef Namespace) const {
755   OS.indent(Indentation) << "static const uint8_t DecoderTable" << Namespace
756     << BitWidth << "[] = {\n";
757 
758   Indentation += 2;
759 
760   // FIXME: We may be able to use the NumToSkip values to recover
761   // appropriate indentation levels.
762   DecoderTable::const_iterator I = Table.begin();
763   DecoderTable::const_iterator E = Table.end();
764   while (I != E) {
765     assert (I < E && "incomplete decode table entry!");
766 
767     uint64_t Pos = I - Table.begin();
768     OS << "/* " << Pos << " */";
769     OS.PadToColumn(12);
770 
771     switch (*I) {
772     default:
773       PrintFatalError("invalid decode table opcode");
774     case MCD::OPC_ExtractField: {
775       ++I;
776       unsigned Start = *I++;
777       unsigned Len = *I++;
778       OS.indent(Indentation) << "MCD::OPC_ExtractField, " << Start << ", "
779         << Len << ",  // Inst{";
780       if (Len > 1)
781         OS << (Start + Len - 1) << "-";
782       OS << Start << "} ...\n";
783       break;
784     }
785     case MCD::OPC_FilterValue: {
786       ++I;
787       OS.indent(Indentation) << "MCD::OPC_FilterValue, ";
788       // The filter value is ULEB128 encoded.
789       while (*I >= 128)
790         OS << (unsigned)*I++ << ", ";
791       OS << (unsigned)*I++ << ", ";
792 
793       // 24-bit numtoskip value.
794       uint8_t Byte = *I++;
795       uint32_t NumToSkip = Byte;
796       OS << (unsigned)Byte << ", ";
797       Byte = *I++;
798       OS << (unsigned)Byte << ", ";
799       NumToSkip |= Byte << 8;
800       Byte = *I++;
801       OS << utostr(Byte) << ", ";
802       NumToSkip |= Byte << 16;
803       OS << "// Skip to: " << ((I - Table.begin()) + NumToSkip) << "\n";
804       break;
805     }
806     case MCD::OPC_CheckField: {
807       ++I;
808       unsigned Start = *I++;
809       unsigned Len = *I++;
810       OS.indent(Indentation) << "MCD::OPC_CheckField, " << Start << ", "
811         << Len << ", ";// << Val << ", " << NumToSkip << ",\n";
812       // ULEB128 encoded field value.
813       for (; *I >= 128; ++I)
814         OS << (unsigned)*I << ", ";
815       OS << (unsigned)*I++ << ", ";
816       // 24-bit numtoskip value.
817       uint8_t Byte = *I++;
818       uint32_t NumToSkip = Byte;
819       OS << (unsigned)Byte << ", ";
820       Byte = *I++;
821       OS << (unsigned)Byte << ", ";
822       NumToSkip |= Byte << 8;
823       Byte = *I++;
824       OS << utostr(Byte) << ", ";
825       NumToSkip |= Byte << 16;
826       OS << "// Skip to: " << ((I - Table.begin()) + NumToSkip) << "\n";
827       break;
828     }
829     case MCD::OPC_CheckPredicate: {
830       ++I;
831       OS.indent(Indentation) << "MCD::OPC_CheckPredicate, ";
832       for (; *I >= 128; ++I)
833         OS << (unsigned)*I << ", ";
834       OS << (unsigned)*I++ << ", ";
835 
836       // 24-bit numtoskip value.
837       uint8_t Byte = *I++;
838       uint32_t NumToSkip = Byte;
839       OS << (unsigned)Byte << ", ";
840       Byte = *I++;
841       OS << (unsigned)Byte << ", ";
842       NumToSkip |= Byte << 8;
843       Byte = *I++;
844       OS << utostr(Byte) << ", ";
845       NumToSkip |= Byte << 16;
846       OS << "// Skip to: " << ((I - Table.begin()) + NumToSkip) << "\n";
847       break;
848     }
849     case MCD::OPC_Decode:
850     case MCD::OPC_TryDecode: {
851       bool IsTry = *I == MCD::OPC_TryDecode;
852       ++I;
853       // Extract the ULEB128 encoded Opcode to a buffer.
854       uint8_t Buffer[16], *p = Buffer;
855       while ((*p++ = *I++) >= 128)
856         assert((p - Buffer) <= (ptrdiff_t)sizeof(Buffer)
857                && "ULEB128 value too large!");
858       // Decode the Opcode value.
859       unsigned Opc = decodeULEB128(Buffer);
860       OS.indent(Indentation) << "MCD::OPC_" << (IsTry ? "Try" : "")
861         << "Decode, ";
862       for (p = Buffer; *p >= 128; ++p)
863         OS << (unsigned)*p << ", ";
864       OS << (unsigned)*p << ", ";
865 
866       // Decoder index.
867       for (; *I >= 128; ++I)
868         OS << (unsigned)*I << ", ";
869       OS << (unsigned)*I++ << ", ";
870 
871       if (!IsTry) {
872         OS << "// Opcode: " << NumberedEncodings[Opc] << "\n";
873         break;
874       }
875 
876       // Fallthrough for OPC_TryDecode.
877 
878       // 24-bit numtoskip value.
879       uint8_t Byte = *I++;
880       uint32_t NumToSkip = Byte;
881       OS << (unsigned)Byte << ", ";
882       Byte = *I++;
883       OS << (unsigned)Byte << ", ";
884       NumToSkip |= Byte << 8;
885       Byte = *I++;
886       OS << utostr(Byte) << ", ";
887       NumToSkip |= Byte << 16;
888 
889       OS << "// Opcode: " << NumberedEncodings[Opc]
890          << ", skip to: " << ((I - Table.begin()) + NumToSkip) << "\n";
891       break;
892     }
893     case MCD::OPC_SoftFail: {
894       ++I;
895       OS.indent(Indentation) << "MCD::OPC_SoftFail";
896       // Positive mask
897       uint64_t Value = 0;
898       unsigned Shift = 0;
899       do {
900         OS << ", " << (unsigned)*I;
901         Value += (*I & 0x7f) << Shift;
902         Shift += 7;
903       } while (*I++ >= 128);
904       if (Value > 127) {
905         OS << " /* 0x";
906         OS.write_hex(Value);
907         OS << " */";
908       }
909       // Negative mask
910       Value = 0;
911       Shift = 0;
912       do {
913         OS << ", " << (unsigned)*I;
914         Value += (*I & 0x7f) << Shift;
915         Shift += 7;
916       } while (*I++ >= 128);
917       if (Value > 127) {
918         OS << " /* 0x";
919         OS.write_hex(Value);
920         OS << " */";
921       }
922       OS << ",\n";
923       break;
924     }
925     case MCD::OPC_Fail: {
926       ++I;
927       OS.indent(Indentation) << "MCD::OPC_Fail,\n";
928       break;
929     }
930     }
931   }
932   OS.indent(Indentation) << "0\n";
933 
934   Indentation -= 2;
935 
936   OS.indent(Indentation) << "};\n\n";
937 }
938 
939 void FixedLenDecoderEmitter::
emitPredicateFunction(formatted_raw_ostream & OS,PredicateSet & Predicates,unsigned Indentation) const940 emitPredicateFunction(formatted_raw_ostream &OS, PredicateSet &Predicates,
941                       unsigned Indentation) const {
942   // The predicate function is just a big switch statement based on the
943   // input predicate index.
944   OS.indent(Indentation) << "static bool checkDecoderPredicate(unsigned Idx, "
945     << "const FeatureBitset &Bits) {\n";
946   Indentation += 2;
947   if (!Predicates.empty()) {
948     OS.indent(Indentation) << "switch (Idx) {\n";
949     OS.indent(Indentation) << "default: llvm_unreachable(\"Invalid index!\");\n";
950     unsigned Index = 0;
951     for (const auto &Predicate : Predicates) {
952       OS.indent(Indentation) << "case " << Index++ << ":\n";
953       OS.indent(Indentation+2) << "return (" << Predicate << ");\n";
954     }
955     OS.indent(Indentation) << "}\n";
956   } else {
957     // No case statement to emit
958     OS.indent(Indentation) << "llvm_unreachable(\"Invalid index!\");\n";
959   }
960   Indentation -= 2;
961   OS.indent(Indentation) << "}\n\n";
962 }
963 
964 void FixedLenDecoderEmitter::
emitDecoderFunction(formatted_raw_ostream & OS,DecoderSet & Decoders,unsigned Indentation) const965 emitDecoderFunction(formatted_raw_ostream &OS, DecoderSet &Decoders,
966                     unsigned Indentation) const {
967   // The decoder function is just a big switch statement based on the
968   // input decoder index.
969   OS.indent(Indentation) << "template <typename InsnType>\n";
970   OS.indent(Indentation) << "static DecodeStatus decodeToMCInst(DecodeStatus S,"
971     << " unsigned Idx, InsnType insn, MCInst &MI,\n";
972   OS.indent(Indentation) << "                                   uint64_t "
973     << "Address, const void *Decoder, bool &DecodeComplete) {\n";
974   Indentation += 2;
975   OS.indent(Indentation) << "DecodeComplete = true;\n";
976   // TODO: When InsnType is large, using uint64_t limits all fields to 64 bits
977   // It would be better for emitBinaryParser to use a 64-bit tmp whenever
978   // possible but fall back to an InsnType-sized tmp for truly large fields.
979   OS.indent(Indentation) << "using TmpType = "
980                             "std::conditional_t<std::is_integral<InsnType>::"
981                             "value, InsnType, uint64_t>;\n";
982   OS.indent(Indentation) << "TmpType tmp;\n";
983   OS.indent(Indentation) << "switch (Idx) {\n";
984   OS.indent(Indentation) << "default: llvm_unreachable(\"Invalid index!\");\n";
985   unsigned Index = 0;
986   for (const auto &Decoder : Decoders) {
987     OS.indent(Indentation) << "case " << Index++ << ":\n";
988     OS << Decoder;
989     OS.indent(Indentation+2) << "return S;\n";
990   }
991   OS.indent(Indentation) << "}\n";
992   Indentation -= 2;
993   OS.indent(Indentation) << "}\n\n";
994 }
995 
996 // Populates the field of the insn given the start position and the number of
997 // consecutive bits to scan for.
998 //
999 // Returns false if and on the first uninitialized bit value encountered.
1000 // Returns true, otherwise.
fieldFromInsn(uint64_t & Field,insn_t & Insn,unsigned StartBit,unsigned NumBits) const1001 bool FilterChooser::fieldFromInsn(uint64_t &Field, insn_t &Insn,
1002                                   unsigned StartBit, unsigned NumBits) const {
1003   Field = 0;
1004 
1005   for (unsigned i = 0; i < NumBits; ++i) {
1006     if (Insn[StartBit + i] == BIT_UNSET)
1007       return false;
1008 
1009     if (Insn[StartBit + i] == BIT_TRUE)
1010       Field = Field | (1ULL << i);
1011   }
1012 
1013   return true;
1014 }
1015 
1016 /// dumpFilterArray - dumpFilterArray prints out debugging info for the given
1017 /// filter array as a series of chars.
dumpFilterArray(raw_ostream & o,const std::vector<bit_value_t> & filter) const1018 void FilterChooser::dumpFilterArray(raw_ostream &o,
1019                                  const std::vector<bit_value_t> &filter) const {
1020   for (unsigned bitIndex = BitWidth; bitIndex > 0; bitIndex--) {
1021     switch (filter[bitIndex - 1]) {
1022     case BIT_UNFILTERED:
1023       o << ".";
1024       break;
1025     case BIT_UNSET:
1026       o << "_";
1027       break;
1028     case BIT_TRUE:
1029       o << "1";
1030       break;
1031     case BIT_FALSE:
1032       o << "0";
1033       break;
1034     }
1035   }
1036 }
1037 
1038 /// dumpStack - dumpStack traverses the filter chooser chain and calls
1039 /// dumpFilterArray on each filter chooser up to the top level one.
dumpStack(raw_ostream & o,const char * prefix) const1040 void FilterChooser::dumpStack(raw_ostream &o, const char *prefix) const {
1041   const FilterChooser *current = this;
1042 
1043   while (current) {
1044     o << prefix;
1045     dumpFilterArray(o, current->FilterBitValues);
1046     o << '\n';
1047     current = current->Parent;
1048   }
1049 }
1050 
1051 // Calculates the island(s) needed to decode the instruction.
1052 // This returns a list of undecoded bits of an instructions, for example,
1053 // Inst{20} = 1 && Inst{3-0} == 0b1111 represents two islands of yet-to-be
1054 // decoded bits in order to verify that the instruction matches the Opcode.
getIslands(std::vector<unsigned> & StartBits,std::vector<unsigned> & EndBits,std::vector<uint64_t> & FieldVals,const insn_t & Insn) const1055 unsigned FilterChooser::getIslands(std::vector<unsigned> &StartBits,
1056                                    std::vector<unsigned> &EndBits,
1057                                    std::vector<uint64_t> &FieldVals,
1058                                    const insn_t &Insn) const {
1059   unsigned Num, BitNo;
1060   Num = BitNo = 0;
1061 
1062   uint64_t FieldVal = 0;
1063 
1064   // 0: Init
1065   // 1: Water (the bit value does not affect decoding)
1066   // 2: Island (well-known bit value needed for decoding)
1067   int State = 0;
1068 
1069   for (unsigned i = 0; i < BitWidth; ++i) {
1070     int64_t Val = Value(Insn[i]);
1071     bool Filtered = PositionFiltered(i);
1072     switch (State) {
1073     default: llvm_unreachable("Unreachable code!");
1074     case 0:
1075     case 1:
1076       if (Filtered || Val == -1)
1077         State = 1; // Still in Water
1078       else {
1079         State = 2; // Into the Island
1080         BitNo = 0;
1081         StartBits.push_back(i);
1082         FieldVal = Val;
1083       }
1084       break;
1085     case 2:
1086       if (Filtered || Val == -1) {
1087         State = 1; // Into the Water
1088         EndBits.push_back(i - 1);
1089         FieldVals.push_back(FieldVal);
1090         ++Num;
1091       } else {
1092         State = 2; // Still in Island
1093         ++BitNo;
1094         FieldVal = FieldVal | Val << BitNo;
1095       }
1096       break;
1097     }
1098   }
1099   // If we are still in Island after the loop, do some housekeeping.
1100   if (State == 2) {
1101     EndBits.push_back(BitWidth - 1);
1102     FieldVals.push_back(FieldVal);
1103     ++Num;
1104   }
1105 
1106   assert(StartBits.size() == Num && EndBits.size() == Num &&
1107          FieldVals.size() == Num);
1108   return Num;
1109 }
1110 
emitBinaryParser(raw_ostream & o,unsigned & Indentation,const OperandInfo & OpInfo,bool & OpHasCompleteDecoder) const1111 void FilterChooser::emitBinaryParser(raw_ostream &o, unsigned &Indentation,
1112                                      const OperandInfo &OpInfo,
1113                                      bool &OpHasCompleteDecoder) const {
1114   const std::string &Decoder = OpInfo.Decoder;
1115 
1116   bool UseInsertBits = OpInfo.numFields() != 1 || OpInfo.InitValue != 0;
1117 
1118   if (UseInsertBits) {
1119     o.indent(Indentation) << "tmp = 0x";
1120     o.write_hex(OpInfo.InitValue);
1121     o << ";\n";
1122   }
1123 
1124   for (const EncodingField &EF : OpInfo) {
1125     o.indent(Indentation);
1126     if (UseInsertBits)
1127       o << "insertBits(tmp, ";
1128     else
1129       o << "tmp = ";
1130     o << "fieldFromInstruction(insn, " << EF.Base << ", " << EF.Width << ')';
1131     if (UseInsertBits)
1132       o << ", " << EF.Offset << ", " << EF.Width << ')';
1133     else if (EF.Offset != 0)
1134       o << " << " << EF.Offset;
1135     o << ";\n";
1136   }
1137 
1138   if (Decoder != "") {
1139     OpHasCompleteDecoder = OpInfo.HasCompleteDecoder;
1140     o.indent(Indentation) << Emitter->GuardPrefix << Decoder
1141       << "(MI, tmp, Address, Decoder)"
1142       << Emitter->GuardPostfix
1143       << " { " << (OpHasCompleteDecoder ? "" : "DecodeComplete = false; ")
1144       << "return MCDisassembler::Fail; }\n";
1145   } else {
1146     OpHasCompleteDecoder = true;
1147     o.indent(Indentation) << "MI.addOperand(MCOperand::createImm(tmp));\n";
1148   }
1149 }
1150 
emitDecoder(raw_ostream & OS,unsigned Indentation,unsigned Opc,bool & HasCompleteDecoder) const1151 void FilterChooser::emitDecoder(raw_ostream &OS, unsigned Indentation,
1152                                 unsigned Opc, bool &HasCompleteDecoder) const {
1153   HasCompleteDecoder = true;
1154 
1155   for (const auto &Op : Operands.find(Opc)->second) {
1156     // If a custom instruction decoder was specified, use that.
1157     if (Op.numFields() == 0 && !Op.Decoder.empty()) {
1158       HasCompleteDecoder = Op.HasCompleteDecoder;
1159       OS.indent(Indentation) << Emitter->GuardPrefix << Op.Decoder
1160         << "(MI, insn, Address, Decoder)"
1161         << Emitter->GuardPostfix
1162         << " { " << (HasCompleteDecoder ? "" : "DecodeComplete = false; ")
1163         << "return MCDisassembler::Fail; }\n";
1164       break;
1165     }
1166 
1167     bool OpHasCompleteDecoder;
1168     emitBinaryParser(OS, Indentation, Op, OpHasCompleteDecoder);
1169     if (!OpHasCompleteDecoder)
1170       HasCompleteDecoder = false;
1171   }
1172 }
1173 
getDecoderIndex(DecoderSet & Decoders,unsigned Opc,bool & HasCompleteDecoder) const1174 unsigned FilterChooser::getDecoderIndex(DecoderSet &Decoders,
1175                                         unsigned Opc,
1176                                         bool &HasCompleteDecoder) const {
1177   // Build up the predicate string.
1178   SmallString<256> Decoder;
1179   // FIXME: emitDecoder() function can take a buffer directly rather than
1180   // a stream.
1181   raw_svector_ostream S(Decoder);
1182   unsigned I = 4;
1183   emitDecoder(S, I, Opc, HasCompleteDecoder);
1184 
1185   // Using the full decoder string as the key value here is a bit
1186   // heavyweight, but is effective. If the string comparisons become a
1187   // performance concern, we can implement a mangling of the predicate
1188   // data easily enough with a map back to the actual string. That's
1189   // overkill for now, though.
1190 
1191   // Make sure the predicate is in the table.
1192   Decoders.insert(CachedHashString(Decoder));
1193   // Now figure out the index for when we write out the table.
1194   DecoderSet::const_iterator P = find(Decoders, Decoder.str());
1195   return (unsigned)(P - Decoders.begin());
1196 }
1197 
emitPredicateMatch(raw_ostream & o,unsigned & Indentation,unsigned Opc) const1198 bool FilterChooser::emitPredicateMatch(raw_ostream &o, unsigned &Indentation,
1199                                        unsigned Opc) const {
1200   ListInit *Predicates =
1201       AllInstructions[Opc].EncodingDef->getValueAsListInit("Predicates");
1202   bool IsFirstEmission = true;
1203   for (unsigned i = 0; i < Predicates->size(); ++i) {
1204     Record *Pred = Predicates->getElementAsRecord(i);
1205     if (!Pred->getValue("AssemblerMatcherPredicate"))
1206       continue;
1207 
1208     if (!isa<DagInit>(Pred->getValue("AssemblerCondDag")->getValue()))
1209       continue;
1210 
1211     const DagInit *D = Pred->getValueAsDag("AssemblerCondDag");
1212     std::string CombineType = D->getOperator()->getAsString();
1213     if (CombineType != "any_of" && CombineType != "all_of")
1214       PrintFatalError(Pred->getLoc(), "Invalid AssemblerCondDag!");
1215     if (D->getNumArgs() == 0)
1216       PrintFatalError(Pred->getLoc(), "Invalid AssemblerCondDag!");
1217     bool IsOr = CombineType == "any_of";
1218 
1219     if (!IsFirstEmission)
1220       o << " && ";
1221 
1222     if (IsOr)
1223       o << "(";
1224 
1225     ListSeparator LS(IsOr ? " || " : " && ");
1226     for (auto *Arg : D->getArgs()) {
1227       o << LS;
1228       if (auto *NotArg = dyn_cast<DagInit>(Arg)) {
1229         if (NotArg->getOperator()->getAsString() != "not" ||
1230             NotArg->getNumArgs() != 1)
1231           PrintFatalError(Pred->getLoc(), "Invalid AssemblerCondDag!");
1232         Arg = NotArg->getArg(0);
1233         o << "!";
1234       }
1235       if (!isa<DefInit>(Arg) ||
1236           !cast<DefInit>(Arg)->getDef()->isSubClassOf("SubtargetFeature"))
1237         PrintFatalError(Pred->getLoc(), "Invalid AssemblerCondDag!");
1238       o << "Bits[" << Emitter->PredicateNamespace << "::" << Arg->getAsString()
1239         << "]";
1240     }
1241 
1242     if (IsOr)
1243       o << ")";
1244 
1245     IsFirstEmission = false;
1246   }
1247   return !Predicates->empty();
1248 }
1249 
doesOpcodeNeedPredicate(unsigned Opc) const1250 bool FilterChooser::doesOpcodeNeedPredicate(unsigned Opc) const {
1251   ListInit *Predicates =
1252       AllInstructions[Opc].EncodingDef->getValueAsListInit("Predicates");
1253   for (unsigned i = 0; i < Predicates->size(); ++i) {
1254     Record *Pred = Predicates->getElementAsRecord(i);
1255     if (!Pred->getValue("AssemblerMatcherPredicate"))
1256       continue;
1257 
1258     if (isa<DagInit>(Pred->getValue("AssemblerCondDag")->getValue()))
1259       return true;
1260   }
1261   return false;
1262 }
1263 
getPredicateIndex(DecoderTableInfo & TableInfo,StringRef Predicate) const1264 unsigned FilterChooser::getPredicateIndex(DecoderTableInfo &TableInfo,
1265                                           StringRef Predicate) const {
1266   // Using the full predicate string as the key value here is a bit
1267   // heavyweight, but is effective. If the string comparisons become a
1268   // performance concern, we can implement a mangling of the predicate
1269   // data easily enough with a map back to the actual string. That's
1270   // overkill for now, though.
1271 
1272   // Make sure the predicate is in the table.
1273   TableInfo.Predicates.insert(CachedHashString(Predicate));
1274   // Now figure out the index for when we write out the table.
1275   PredicateSet::const_iterator P = find(TableInfo.Predicates, Predicate);
1276   return (unsigned)(P - TableInfo.Predicates.begin());
1277 }
1278 
emitPredicateTableEntry(DecoderTableInfo & TableInfo,unsigned Opc) const1279 void FilterChooser::emitPredicateTableEntry(DecoderTableInfo &TableInfo,
1280                                             unsigned Opc) const {
1281   if (!doesOpcodeNeedPredicate(Opc))
1282     return;
1283 
1284   // Build up the predicate string.
1285   SmallString<256> Predicate;
1286   // FIXME: emitPredicateMatch() functions can take a buffer directly rather
1287   // than a stream.
1288   raw_svector_ostream PS(Predicate);
1289   unsigned I = 0;
1290   emitPredicateMatch(PS, I, Opc);
1291 
1292   // Figure out the index into the predicate table for the predicate just
1293   // computed.
1294   unsigned PIdx = getPredicateIndex(TableInfo, PS.str());
1295   SmallString<16> PBytes;
1296   raw_svector_ostream S(PBytes);
1297   encodeULEB128(PIdx, S);
1298 
1299   TableInfo.Table.push_back(MCD::OPC_CheckPredicate);
1300   // Predicate index
1301   for (unsigned i = 0, e = PBytes.size(); i != e; ++i)
1302     TableInfo.Table.push_back(PBytes[i]);
1303   // Push location for NumToSkip backpatching.
1304   TableInfo.FixupStack.back().push_back(TableInfo.Table.size());
1305   TableInfo.Table.push_back(0);
1306   TableInfo.Table.push_back(0);
1307   TableInfo.Table.push_back(0);
1308 }
1309 
emitSoftFailTableEntry(DecoderTableInfo & TableInfo,unsigned Opc) const1310 void FilterChooser::emitSoftFailTableEntry(DecoderTableInfo &TableInfo,
1311                                            unsigned Opc) const {
1312   BitsInit *SFBits =
1313       AllInstructions[Opc].EncodingDef->getValueAsBitsInit("SoftFail");
1314   if (!SFBits) return;
1315   BitsInit *InstBits =
1316       AllInstructions[Opc].EncodingDef->getValueAsBitsInit("Inst");
1317 
1318   APInt PositiveMask(BitWidth, 0ULL);
1319   APInt NegativeMask(BitWidth, 0ULL);
1320   for (unsigned i = 0; i < BitWidth; ++i) {
1321     bit_value_t B = bitFromBits(*SFBits, i);
1322     bit_value_t IB = bitFromBits(*InstBits, i);
1323 
1324     if (B != BIT_TRUE) continue;
1325 
1326     switch (IB) {
1327     case BIT_FALSE:
1328       // The bit is meant to be false, so emit a check to see if it is true.
1329       PositiveMask.setBit(i);
1330       break;
1331     case BIT_TRUE:
1332       // The bit is meant to be true, so emit a check to see if it is false.
1333       NegativeMask.setBit(i);
1334       break;
1335     default:
1336       // The bit is not set; this must be an error!
1337       errs() << "SoftFail Conflict: bit SoftFail{" << i << "} in "
1338              << AllInstructions[Opc] << " is set but Inst{" << i
1339              << "} is unset!\n"
1340              << "  - You can only mark a bit as SoftFail if it is fully defined"
1341              << " (1/0 - not '?') in Inst\n";
1342       return;
1343     }
1344   }
1345 
1346   bool NeedPositiveMask = PositiveMask.getBoolValue();
1347   bool NeedNegativeMask = NegativeMask.getBoolValue();
1348 
1349   if (!NeedPositiveMask && !NeedNegativeMask)
1350     return;
1351 
1352   TableInfo.Table.push_back(MCD::OPC_SoftFail);
1353 
1354   SmallString<16> MaskBytes;
1355   raw_svector_ostream S(MaskBytes);
1356   if (NeedPositiveMask) {
1357     encodeULEB128(PositiveMask.getZExtValue(), S);
1358     for (unsigned i = 0, e = MaskBytes.size(); i != e; ++i)
1359       TableInfo.Table.push_back(MaskBytes[i]);
1360   } else
1361     TableInfo.Table.push_back(0);
1362   if (NeedNegativeMask) {
1363     MaskBytes.clear();
1364     encodeULEB128(NegativeMask.getZExtValue(), S);
1365     for (unsigned i = 0, e = MaskBytes.size(); i != e; ++i)
1366       TableInfo.Table.push_back(MaskBytes[i]);
1367   } else
1368     TableInfo.Table.push_back(0);
1369 }
1370 
1371 // Emits table entries to decode the singleton.
emitSingletonTableEntry(DecoderTableInfo & TableInfo,EncodingIDAndOpcode Opc) const1372 void FilterChooser::emitSingletonTableEntry(DecoderTableInfo &TableInfo,
1373                                             EncodingIDAndOpcode Opc) const {
1374   std::vector<unsigned> StartBits;
1375   std::vector<unsigned> EndBits;
1376   std::vector<uint64_t> FieldVals;
1377   insn_t Insn;
1378   insnWithID(Insn, Opc.EncodingID);
1379 
1380   // Look for islands of undecoded bits of the singleton.
1381   getIslands(StartBits, EndBits, FieldVals, Insn);
1382 
1383   unsigned Size = StartBits.size();
1384 
1385   // Emit the predicate table entry if one is needed.
1386   emitPredicateTableEntry(TableInfo, Opc.EncodingID);
1387 
1388   // Check any additional encoding fields needed.
1389   for (unsigned I = Size; I != 0; --I) {
1390     unsigned NumBits = EndBits[I-1] - StartBits[I-1] + 1;
1391     TableInfo.Table.push_back(MCD::OPC_CheckField);
1392     TableInfo.Table.push_back(StartBits[I-1]);
1393     TableInfo.Table.push_back(NumBits);
1394     uint8_t Buffer[16], *p;
1395     encodeULEB128(FieldVals[I-1], Buffer);
1396     for (p = Buffer; *p >= 128 ; ++p)
1397       TableInfo.Table.push_back(*p);
1398     TableInfo.Table.push_back(*p);
1399     // Push location for NumToSkip backpatching.
1400     TableInfo.FixupStack.back().push_back(TableInfo.Table.size());
1401     // The fixup is always 24-bits, so go ahead and allocate the space
1402     // in the table so all our relative position calculations work OK even
1403     // before we fully resolve the real value here.
1404     TableInfo.Table.push_back(0);
1405     TableInfo.Table.push_back(0);
1406     TableInfo.Table.push_back(0);
1407   }
1408 
1409   // Check for soft failure of the match.
1410   emitSoftFailTableEntry(TableInfo, Opc.EncodingID);
1411 
1412   bool HasCompleteDecoder;
1413   unsigned DIdx =
1414       getDecoderIndex(TableInfo.Decoders, Opc.EncodingID, HasCompleteDecoder);
1415 
1416   // Produce OPC_Decode or OPC_TryDecode opcode based on the information
1417   // whether the instruction decoder is complete or not. If it is complete
1418   // then it handles all possible values of remaining variable/unfiltered bits
1419   // and for any value can determine if the bitpattern is a valid instruction
1420   // or not. This means OPC_Decode will be the final step in the decoding
1421   // process. If it is not complete, then the Fail return code from the
1422   // decoder method indicates that additional processing should be done to see
1423   // if there is any other instruction that also matches the bitpattern and
1424   // can decode it.
1425   TableInfo.Table.push_back(HasCompleteDecoder ? MCD::OPC_Decode :
1426       MCD::OPC_TryDecode);
1427   NumEncodingsSupported++;
1428   uint8_t Buffer[16], *p;
1429   encodeULEB128(Opc.Opcode, Buffer);
1430   for (p = Buffer; *p >= 128 ; ++p)
1431     TableInfo.Table.push_back(*p);
1432   TableInfo.Table.push_back(*p);
1433 
1434   SmallString<16> Bytes;
1435   raw_svector_ostream S(Bytes);
1436   encodeULEB128(DIdx, S);
1437 
1438   // Decoder index
1439   for (unsigned i = 0, e = Bytes.size(); i != e; ++i)
1440     TableInfo.Table.push_back(Bytes[i]);
1441 
1442   if (!HasCompleteDecoder) {
1443     // Push location for NumToSkip backpatching.
1444     TableInfo.FixupStack.back().push_back(TableInfo.Table.size());
1445     // Allocate the space for the fixup.
1446     TableInfo.Table.push_back(0);
1447     TableInfo.Table.push_back(0);
1448     TableInfo.Table.push_back(0);
1449   }
1450 }
1451 
1452 // Emits table entries to decode the singleton, and then to decode the rest.
emitSingletonTableEntry(DecoderTableInfo & TableInfo,const Filter & Best) const1453 void FilterChooser::emitSingletonTableEntry(DecoderTableInfo &TableInfo,
1454                                             const Filter &Best) const {
1455   EncodingIDAndOpcode Opc = Best.getSingletonOpc();
1456 
1457   // complex singletons need predicate checks from the first singleton
1458   // to refer forward to the variable filterchooser that follows.
1459   TableInfo.FixupStack.emplace_back();
1460 
1461   emitSingletonTableEntry(TableInfo, Opc);
1462 
1463   resolveTableFixups(TableInfo.Table, TableInfo.FixupStack.back(),
1464                      TableInfo.Table.size());
1465   TableInfo.FixupStack.pop_back();
1466 
1467   Best.getVariableFC().emitTableEntries(TableInfo);
1468 }
1469 
1470 // Assign a single filter and run with it.  Top level API client can initialize
1471 // with a single filter to start the filtering process.
runSingleFilter(unsigned startBit,unsigned numBit,bool mixed)1472 void FilterChooser::runSingleFilter(unsigned startBit, unsigned numBit,
1473                                     bool mixed) {
1474   Filters.clear();
1475   Filters.emplace_back(*this, startBit, numBit, true);
1476   BestIndex = 0; // Sole Filter instance to choose from.
1477   bestFilter().recurse();
1478 }
1479 
1480 // reportRegion is a helper function for filterProcessor to mark a region as
1481 // eligible for use as a filter region.
reportRegion(bitAttr_t RA,unsigned StartBit,unsigned BitIndex,bool AllowMixed)1482 void FilterChooser::reportRegion(bitAttr_t RA, unsigned StartBit,
1483                                  unsigned BitIndex, bool AllowMixed) {
1484   if (RA == ATTR_MIXED && AllowMixed)
1485     Filters.emplace_back(*this, StartBit, BitIndex - StartBit, true);
1486   else if (RA == ATTR_ALL_SET && !AllowMixed)
1487     Filters.emplace_back(*this, StartBit, BitIndex - StartBit, false);
1488 }
1489 
1490 // FilterProcessor scans the well-known encoding bits of the instructions and
1491 // builds up a list of candidate filters.  It chooses the best filter and
1492 // recursively descends down the decoding tree.
filterProcessor(bool AllowMixed,bool Greedy)1493 bool FilterChooser::filterProcessor(bool AllowMixed, bool Greedy) {
1494   Filters.clear();
1495   BestIndex = -1;
1496   unsigned numInstructions = Opcodes.size();
1497 
1498   assert(numInstructions && "Filter created with no instructions");
1499 
1500   // No further filtering is necessary.
1501   if (numInstructions == 1)
1502     return true;
1503 
1504   // Heuristics.  See also doFilter()'s "Heuristics" comment when num of
1505   // instructions is 3.
1506   if (AllowMixed && !Greedy) {
1507     assert(numInstructions == 3);
1508 
1509     for (auto Opcode : Opcodes) {
1510       std::vector<unsigned> StartBits;
1511       std::vector<unsigned> EndBits;
1512       std::vector<uint64_t> FieldVals;
1513       insn_t Insn;
1514 
1515       insnWithID(Insn, Opcode.EncodingID);
1516 
1517       // Look for islands of undecoded bits of any instruction.
1518       if (getIslands(StartBits, EndBits, FieldVals, Insn) > 0) {
1519         // Found an instruction with island(s).  Now just assign a filter.
1520         runSingleFilter(StartBits[0], EndBits[0] - StartBits[0] + 1, true);
1521         return true;
1522       }
1523     }
1524   }
1525 
1526   unsigned BitIndex;
1527 
1528   // We maintain BIT_WIDTH copies of the bitAttrs automaton.
1529   // The automaton consumes the corresponding bit from each
1530   // instruction.
1531   //
1532   //   Input symbols: 0, 1, and _ (unset).
1533   //   States:        NONE, FILTERED, ALL_SET, ALL_UNSET, and MIXED.
1534   //   Initial state: NONE.
1535   //
1536   // (NONE) ------- [01] -> (ALL_SET)
1537   // (NONE) ------- _ ----> (ALL_UNSET)
1538   // (ALL_SET) ---- [01] -> (ALL_SET)
1539   // (ALL_SET) ---- _ ----> (MIXED)
1540   // (ALL_UNSET) -- [01] -> (MIXED)
1541   // (ALL_UNSET) -- _ ----> (ALL_UNSET)
1542   // (MIXED) ------ . ----> (MIXED)
1543   // (FILTERED)---- . ----> (FILTERED)
1544 
1545   std::vector<bitAttr_t> bitAttrs;
1546 
1547   // FILTERED bit positions provide no entropy and are not worthy of pursuing.
1548   // Filter::recurse() set either BIT_TRUE or BIT_FALSE for each position.
1549   for (BitIndex = 0; BitIndex < BitWidth; ++BitIndex)
1550     if (FilterBitValues[BitIndex] == BIT_TRUE ||
1551         FilterBitValues[BitIndex] == BIT_FALSE)
1552       bitAttrs.push_back(ATTR_FILTERED);
1553     else
1554       bitAttrs.push_back(ATTR_NONE);
1555 
1556   for (unsigned InsnIndex = 0; InsnIndex < numInstructions; ++InsnIndex) {
1557     insn_t insn;
1558 
1559     insnWithID(insn, Opcodes[InsnIndex].EncodingID);
1560 
1561     for (BitIndex = 0; BitIndex < BitWidth; ++BitIndex) {
1562       switch (bitAttrs[BitIndex]) {
1563       case ATTR_NONE:
1564         if (insn[BitIndex] == BIT_UNSET)
1565           bitAttrs[BitIndex] = ATTR_ALL_UNSET;
1566         else
1567           bitAttrs[BitIndex] = ATTR_ALL_SET;
1568         break;
1569       case ATTR_ALL_SET:
1570         if (insn[BitIndex] == BIT_UNSET)
1571           bitAttrs[BitIndex] = ATTR_MIXED;
1572         break;
1573       case ATTR_ALL_UNSET:
1574         if (insn[BitIndex] != BIT_UNSET)
1575           bitAttrs[BitIndex] = ATTR_MIXED;
1576         break;
1577       case ATTR_MIXED:
1578       case ATTR_FILTERED:
1579         break;
1580       }
1581     }
1582   }
1583 
1584   // The regionAttr automaton consumes the bitAttrs automatons' state,
1585   // lowest-to-highest.
1586   //
1587   //   Input symbols: F(iltered), (all_)S(et), (all_)U(nset), M(ixed)
1588   //   States:        NONE, ALL_SET, MIXED
1589   //   Initial state: NONE
1590   //
1591   // (NONE) ----- F --> (NONE)
1592   // (NONE) ----- S --> (ALL_SET)     ; and set region start
1593   // (NONE) ----- U --> (NONE)
1594   // (NONE) ----- M --> (MIXED)       ; and set region start
1595   // (ALL_SET) -- F --> (NONE)        ; and report an ALL_SET region
1596   // (ALL_SET) -- S --> (ALL_SET)
1597   // (ALL_SET) -- U --> (NONE)        ; and report an ALL_SET region
1598   // (ALL_SET) -- M --> (MIXED)       ; and report an ALL_SET region
1599   // (MIXED) ---- F --> (NONE)        ; and report a MIXED region
1600   // (MIXED) ---- S --> (ALL_SET)     ; and report a MIXED region
1601   // (MIXED) ---- U --> (NONE)        ; and report a MIXED region
1602   // (MIXED) ---- M --> (MIXED)
1603 
1604   bitAttr_t RA = ATTR_NONE;
1605   unsigned StartBit = 0;
1606 
1607   for (BitIndex = 0; BitIndex < BitWidth; ++BitIndex) {
1608     bitAttr_t bitAttr = bitAttrs[BitIndex];
1609 
1610     assert(bitAttr != ATTR_NONE && "Bit without attributes");
1611 
1612     switch (RA) {
1613     case ATTR_NONE:
1614       switch (bitAttr) {
1615       case ATTR_FILTERED:
1616         break;
1617       case ATTR_ALL_SET:
1618         StartBit = BitIndex;
1619         RA = ATTR_ALL_SET;
1620         break;
1621       case ATTR_ALL_UNSET:
1622         break;
1623       case ATTR_MIXED:
1624         StartBit = BitIndex;
1625         RA = ATTR_MIXED;
1626         break;
1627       default:
1628         llvm_unreachable("Unexpected bitAttr!");
1629       }
1630       break;
1631     case ATTR_ALL_SET:
1632       switch (bitAttr) {
1633       case ATTR_FILTERED:
1634         reportRegion(RA, StartBit, BitIndex, AllowMixed);
1635         RA = ATTR_NONE;
1636         break;
1637       case ATTR_ALL_SET:
1638         break;
1639       case ATTR_ALL_UNSET:
1640         reportRegion(RA, StartBit, BitIndex, AllowMixed);
1641         RA = ATTR_NONE;
1642         break;
1643       case ATTR_MIXED:
1644         reportRegion(RA, StartBit, BitIndex, AllowMixed);
1645         StartBit = BitIndex;
1646         RA = ATTR_MIXED;
1647         break;
1648       default:
1649         llvm_unreachable("Unexpected bitAttr!");
1650       }
1651       break;
1652     case ATTR_MIXED:
1653       switch (bitAttr) {
1654       case ATTR_FILTERED:
1655         reportRegion(RA, StartBit, BitIndex, AllowMixed);
1656         StartBit = BitIndex;
1657         RA = ATTR_NONE;
1658         break;
1659       case ATTR_ALL_SET:
1660         reportRegion(RA, StartBit, BitIndex, AllowMixed);
1661         StartBit = BitIndex;
1662         RA = ATTR_ALL_SET;
1663         break;
1664       case ATTR_ALL_UNSET:
1665         reportRegion(RA, StartBit, BitIndex, AllowMixed);
1666         RA = ATTR_NONE;
1667         break;
1668       case ATTR_MIXED:
1669         break;
1670       default:
1671         llvm_unreachable("Unexpected bitAttr!");
1672       }
1673       break;
1674     case ATTR_ALL_UNSET:
1675       llvm_unreachable("regionAttr state machine has no ATTR_UNSET state");
1676     case ATTR_FILTERED:
1677       llvm_unreachable("regionAttr state machine has no ATTR_FILTERED state");
1678     }
1679   }
1680 
1681   // At the end, if we're still in ALL_SET or MIXED states, report a region
1682   switch (RA) {
1683   case ATTR_NONE:
1684     break;
1685   case ATTR_FILTERED:
1686     break;
1687   case ATTR_ALL_SET:
1688     reportRegion(RA, StartBit, BitIndex, AllowMixed);
1689     break;
1690   case ATTR_ALL_UNSET:
1691     break;
1692   case ATTR_MIXED:
1693     reportRegion(RA, StartBit, BitIndex, AllowMixed);
1694     break;
1695   }
1696 
1697   // We have finished with the filter processings.  Now it's time to choose
1698   // the best performing filter.
1699   BestIndex = 0;
1700   bool AllUseless = true;
1701   unsigned BestScore = 0;
1702 
1703   for (unsigned i = 0, e = Filters.size(); i != e; ++i) {
1704     unsigned Usefulness = Filters[i].usefulness();
1705 
1706     if (Usefulness)
1707       AllUseless = false;
1708 
1709     if (Usefulness > BestScore) {
1710       BestIndex = i;
1711       BestScore = Usefulness;
1712     }
1713   }
1714 
1715   if (!AllUseless)
1716     bestFilter().recurse();
1717 
1718   return !AllUseless;
1719 } // end of FilterChooser::filterProcessor(bool)
1720 
1721 // Decides on the best configuration of filter(s) to use in order to decode
1722 // the instructions.  A conflict of instructions may occur, in which case we
1723 // dump the conflict set to the standard error.
doFilter()1724 void FilterChooser::doFilter() {
1725   unsigned Num = Opcodes.size();
1726   assert(Num && "FilterChooser created with no instructions");
1727 
1728   // Try regions of consecutive known bit values first.
1729   if (filterProcessor(false))
1730     return;
1731 
1732   // Then regions of mixed bits (both known and unitialized bit values allowed).
1733   if (filterProcessor(true))
1734     return;
1735 
1736   // Heuristics to cope with conflict set {t2CMPrs, t2SUBSrr, t2SUBSrs} where
1737   // no single instruction for the maximum ATTR_MIXED region Inst{14-4} has a
1738   // well-known encoding pattern.  In such case, we backtrack and scan for the
1739   // the very first consecutive ATTR_ALL_SET region and assign a filter to it.
1740   if (Num == 3 && filterProcessor(true, false))
1741     return;
1742 
1743   // If we come to here, the instruction decoding has failed.
1744   // Set the BestIndex to -1 to indicate so.
1745   BestIndex = -1;
1746 }
1747 
1748 // emitTableEntries - Emit state machine entries to decode our share of
1749 // instructions.
emitTableEntries(DecoderTableInfo & TableInfo) const1750 void FilterChooser::emitTableEntries(DecoderTableInfo &TableInfo) const {
1751   if (Opcodes.size() == 1) {
1752     // There is only one instruction in the set, which is great!
1753     // Call emitSingletonDecoder() to see whether there are any remaining
1754     // encodings bits.
1755     emitSingletonTableEntry(TableInfo, Opcodes[0]);
1756     return;
1757   }
1758 
1759   // Choose the best filter to do the decodings!
1760   if (BestIndex != -1) {
1761     const Filter &Best = Filters[BestIndex];
1762     if (Best.getNumFiltered() == 1)
1763       emitSingletonTableEntry(TableInfo, Best);
1764     else
1765       Best.emitTableEntry(TableInfo);
1766     return;
1767   }
1768 
1769   // We don't know how to decode these instructions!  Dump the
1770   // conflict set and bail.
1771 
1772   // Print out useful conflict information for postmortem analysis.
1773   errs() << "Decoding Conflict:\n";
1774 
1775   dumpStack(errs(), "\t\t");
1776 
1777   for (auto Opcode : Opcodes) {
1778     errs() << '\t';
1779     emitNameWithID(errs(), Opcode.EncodingID);
1780     errs() << " ";
1781     dumpBits(
1782         errs(),
1783         getBitsField(*AllInstructions[Opcode.EncodingID].EncodingDef, "Inst"));
1784     errs() << '\n';
1785   }
1786 }
1787 
findOperandDecoderMethod(TypedInit * TI)1788 static std::string findOperandDecoderMethod(TypedInit *TI) {
1789   std::string Decoder;
1790 
1791   Record *Record = cast<DefInit>(TI)->getDef();
1792 
1793   RecordVal *DecoderString = Record->getValue("DecoderMethod");
1794   StringInit *String = DecoderString ?
1795     dyn_cast<StringInit>(DecoderString->getValue()) : nullptr;
1796   if (String) {
1797     Decoder = std::string(String->getValue());
1798     if (!Decoder.empty())
1799       return Decoder;
1800   }
1801 
1802   if (Record->isSubClassOf("RegisterOperand"))
1803     Record = Record->getValueAsDef("RegClass");
1804 
1805   if (Record->isSubClassOf("RegisterClass")) {
1806     Decoder = "Decode" + Record->getName().str() + "RegisterClass";
1807   } else if (Record->isSubClassOf("PointerLikeRegClass")) {
1808     Decoder = "DecodePointerLikeRegClass" +
1809       utostr(Record->getValueAsInt("RegClassKind"));
1810   }
1811 
1812   return Decoder;
1813 }
1814 
1815 static bool
populateInstruction(CodeGenTarget & Target,const Record & EncodingDef,const CodeGenInstruction & CGI,unsigned Opc,std::map<unsigned,std::vector<OperandInfo>> & Operands)1816 populateInstruction(CodeGenTarget &Target, const Record &EncodingDef,
1817                     const CodeGenInstruction &CGI, unsigned Opc,
1818                     std::map<unsigned, std::vector<OperandInfo>> &Operands) {
1819   const Record &Def = *CGI.TheDef;
1820   // If all the bit positions are not specified; do not decode this instruction.
1821   // We are bound to fail!  For proper disassembly, the well-known encoding bits
1822   // of the instruction must be fully specified.
1823 
1824   BitsInit &Bits = getBitsField(EncodingDef, "Inst");
1825   if (Bits.allInComplete()) return false;
1826 
1827   std::vector<OperandInfo> InsnOperands;
1828 
1829   // If the instruction has specified a custom decoding hook, use that instead
1830   // of trying to auto-generate the decoder.
1831   StringRef InstDecoder = EncodingDef.getValueAsString("DecoderMethod");
1832   if (InstDecoder != "") {
1833     bool HasCompleteInstDecoder = EncodingDef.getValueAsBit("hasCompleteDecoder");
1834     InsnOperands.push_back(
1835         OperandInfo(std::string(InstDecoder), HasCompleteInstDecoder));
1836     Operands[Opc] = InsnOperands;
1837     return true;
1838   }
1839 
1840   // Generate a description of the operand of the instruction that we know
1841   // how to decode automatically.
1842   // FIXME: We'll need to have a way to manually override this as needed.
1843 
1844   // Gather the outputs/inputs of the instruction, so we can find their
1845   // positions in the encoding.  This assumes for now that they appear in the
1846   // MCInst in the order that they're listed.
1847   std::vector<std::pair<Init*, StringRef>> InOutOperands;
1848   DagInit *Out  = Def.getValueAsDag("OutOperandList");
1849   DagInit *In  = Def.getValueAsDag("InOperandList");
1850   for (unsigned i = 0; i < Out->getNumArgs(); ++i)
1851     InOutOperands.push_back(std::make_pair(Out->getArg(i),
1852                                            Out->getArgNameStr(i)));
1853   for (unsigned i = 0; i < In->getNumArgs(); ++i)
1854     InOutOperands.push_back(std::make_pair(In->getArg(i),
1855                                            In->getArgNameStr(i)));
1856 
1857   // Search for tied operands, so that we can correctly instantiate
1858   // operands that are not explicitly represented in the encoding.
1859   std::map<std::string, std::string> TiedNames;
1860   for (unsigned i = 0; i < CGI.Operands.size(); ++i) {
1861     int tiedTo = CGI.Operands[i].getTiedRegister();
1862     if (tiedTo != -1) {
1863       std::pair<unsigned, unsigned> SO =
1864         CGI.Operands.getSubOperandNumber(tiedTo);
1865       TiedNames[std::string(InOutOperands[i].second)] =
1866           std::string(InOutOperands[SO.first].second);
1867       TiedNames[std::string(InOutOperands[SO.first].second)] =
1868           std::string(InOutOperands[i].second);
1869     }
1870   }
1871 
1872   std::map<std::string, std::vector<OperandInfo>> NumberedInsnOperands;
1873   std::set<std::string> NumberedInsnOperandsNoTie;
1874   if (Target.getInstructionSet()->
1875         getValueAsBit("decodePositionallyEncodedOperands")) {
1876     const std::vector<RecordVal> &Vals = Def.getValues();
1877     unsigned NumberedOp = 0;
1878 
1879     std::set<unsigned> NamedOpIndices;
1880     if (Target.getInstructionSet()->
1881          getValueAsBit("noNamedPositionallyEncodedOperands"))
1882       // Collect the set of operand indices that might correspond to named
1883       // operand, and skip these when assigning operands based on position.
1884       for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
1885         unsigned OpIdx;
1886         if (!CGI.Operands.hasOperandNamed(Vals[i].getName(), OpIdx))
1887           continue;
1888 
1889         NamedOpIndices.insert(OpIdx);
1890       }
1891 
1892     for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
1893       // Ignore fixed fields in the record, we're looking for values like:
1894       //    bits<5> RST = { ?, ?, ?, ?, ? };
1895       if (Vals[i].isNonconcreteOK() || Vals[i].getValue()->isComplete())
1896         continue;
1897 
1898       // Determine if Vals[i] actually contributes to the Inst encoding.
1899       unsigned bi = 0;
1900       for (; bi < Bits.getNumBits(); ++bi) {
1901         VarInit *Var = nullptr;
1902         VarBitInit *BI = dyn_cast<VarBitInit>(Bits.getBit(bi));
1903         if (BI)
1904           Var = dyn_cast<VarInit>(BI->getBitVar());
1905         else
1906           Var = dyn_cast<VarInit>(Bits.getBit(bi));
1907 
1908         if (Var && Var->getName() == Vals[i].getName())
1909           break;
1910       }
1911 
1912       if (bi == Bits.getNumBits())
1913         continue;
1914 
1915       // Skip variables that correspond to explicitly-named operands.
1916       unsigned OpIdx;
1917       if (CGI.Operands.hasOperandNamed(Vals[i].getName(), OpIdx))
1918         continue;
1919 
1920       // Get the bit range for this operand:
1921       unsigned bitStart = bi++, bitWidth = 1;
1922       for (; bi < Bits.getNumBits(); ++bi) {
1923         VarInit *Var = nullptr;
1924         VarBitInit *BI = dyn_cast<VarBitInit>(Bits.getBit(bi));
1925         if (BI)
1926           Var = dyn_cast<VarInit>(BI->getBitVar());
1927         else
1928           Var = dyn_cast<VarInit>(Bits.getBit(bi));
1929 
1930         if (!Var)
1931           break;
1932 
1933         if (Var->getName() != Vals[i].getName())
1934           break;
1935 
1936         ++bitWidth;
1937       }
1938 
1939       unsigned NumberOps = CGI.Operands.size();
1940       while (NumberedOp < NumberOps &&
1941              (CGI.Operands.isFlatOperandNotEmitted(NumberedOp) ||
1942               (!NamedOpIndices.empty() && NamedOpIndices.count(
1943                 CGI.Operands.getSubOperandNumber(NumberedOp).first))))
1944         ++NumberedOp;
1945 
1946       OpIdx = NumberedOp++;
1947 
1948       // OpIdx now holds the ordered operand number of Vals[i].
1949       std::pair<unsigned, unsigned> SO =
1950         CGI.Operands.getSubOperandNumber(OpIdx);
1951       const std::string &Name = CGI.Operands[SO.first].Name;
1952 
1953       LLVM_DEBUG(dbgs() << "Numbered operand mapping for " << Def.getName()
1954                         << ": " << Name << "(" << SO.first << ", " << SO.second
1955                         << ") => " << Vals[i].getName() << "\n");
1956 
1957       std::string Decoder;
1958       Record *TypeRecord = CGI.Operands[SO.first].Rec;
1959 
1960       RecordVal *DecoderString = TypeRecord->getValue("DecoderMethod");
1961       StringInit *String = DecoderString ?
1962         dyn_cast<StringInit>(DecoderString->getValue()) : nullptr;
1963       if (String && String->getValue() != "")
1964         Decoder = std::string(String->getValue());
1965 
1966       if (Decoder == "" &&
1967           CGI.Operands[SO.first].MIOperandInfo &&
1968           CGI.Operands[SO.first].MIOperandInfo->getNumArgs()) {
1969         Init *Arg = CGI.Operands[SO.first].MIOperandInfo->
1970                       getArg(SO.second);
1971         if (DefInit *DI = cast<DefInit>(Arg))
1972           TypeRecord = DI->getDef();
1973       }
1974 
1975       bool isReg = false;
1976       if (TypeRecord->isSubClassOf("RegisterOperand"))
1977         TypeRecord = TypeRecord->getValueAsDef("RegClass");
1978       if (TypeRecord->isSubClassOf("RegisterClass")) {
1979         Decoder = "Decode" + TypeRecord->getName().str() + "RegisterClass";
1980         isReg = true;
1981       } else if (TypeRecord->isSubClassOf("PointerLikeRegClass")) {
1982         Decoder = "DecodePointerLikeRegClass" +
1983                   utostr(TypeRecord->getValueAsInt("RegClassKind"));
1984         isReg = true;
1985       }
1986 
1987       DecoderString = TypeRecord->getValue("DecoderMethod");
1988       String = DecoderString ?
1989         dyn_cast<StringInit>(DecoderString->getValue()) : nullptr;
1990       if (!isReg && String && String->getValue() != "")
1991         Decoder = std::string(String->getValue());
1992 
1993       RecordVal *HasCompleteDecoderVal =
1994         TypeRecord->getValue("hasCompleteDecoder");
1995       BitInit *HasCompleteDecoderBit = HasCompleteDecoderVal ?
1996         dyn_cast<BitInit>(HasCompleteDecoderVal->getValue()) : nullptr;
1997       bool HasCompleteDecoder = HasCompleteDecoderBit ?
1998         HasCompleteDecoderBit->getValue() : true;
1999 
2000       OperandInfo OpInfo(Decoder, HasCompleteDecoder);
2001       OpInfo.addField(bitStart, bitWidth, 0);
2002 
2003       NumberedInsnOperands[Name].push_back(OpInfo);
2004 
2005       // FIXME: For complex operands with custom decoders we can't handle tied
2006       // sub-operands automatically. Skip those here and assume that this is
2007       // fixed up elsewhere.
2008       if (CGI.Operands[SO.first].MIOperandInfo &&
2009           CGI.Operands[SO.first].MIOperandInfo->getNumArgs() > 1 &&
2010           String && String->getValue() != "")
2011         NumberedInsnOperandsNoTie.insert(Name);
2012     }
2013   }
2014 
2015   // For each operand, see if we can figure out where it is encoded.
2016   for (const auto &Op : InOutOperands) {
2017     if (!NumberedInsnOperands[std::string(Op.second)].empty()) {
2018       llvm::append_range(InsnOperands,
2019                          NumberedInsnOperands[std::string(Op.second)]);
2020       continue;
2021     }
2022     if (!NumberedInsnOperands[TiedNames[std::string(Op.second)]].empty()) {
2023       if (!NumberedInsnOperandsNoTie.count(TiedNames[std::string(Op.second)])) {
2024         // Figure out to which (sub)operand we're tied.
2025         unsigned i =
2026             CGI.Operands.getOperandNamed(TiedNames[std::string(Op.second)]);
2027         int tiedTo = CGI.Operands[i].getTiedRegister();
2028         if (tiedTo == -1) {
2029           i = CGI.Operands.getOperandNamed(Op.second);
2030           tiedTo = CGI.Operands[i].getTiedRegister();
2031         }
2032 
2033         if (tiedTo != -1) {
2034           std::pair<unsigned, unsigned> SO =
2035             CGI.Operands.getSubOperandNumber(tiedTo);
2036 
2037           InsnOperands.push_back(
2038               NumberedInsnOperands[TiedNames[std::string(Op.second)]]
2039                                   [SO.second]);
2040         }
2041       }
2042       continue;
2043     }
2044 
2045     TypedInit *TI = cast<TypedInit>(Op.first);
2046 
2047     // At this point, we can locate the decoder field, but we need to know how
2048     // to interpret it.  As a first step, require the target to provide
2049     // callbacks for decoding register classes.
2050     std::string Decoder = findOperandDecoderMethod(TI);
2051     Record *TypeRecord = cast<DefInit>(TI)->getDef();
2052 
2053     RecordVal *HasCompleteDecoderVal =
2054       TypeRecord->getValue("hasCompleteDecoder");
2055     BitInit *HasCompleteDecoderBit = HasCompleteDecoderVal ?
2056       dyn_cast<BitInit>(HasCompleteDecoderVal->getValue()) : nullptr;
2057     bool HasCompleteDecoder = HasCompleteDecoderBit ?
2058       HasCompleteDecoderBit->getValue() : true;
2059 
2060     OperandInfo OpInfo(Decoder, HasCompleteDecoder);
2061 
2062     // Some bits of the operand may be required to be 1 depending on the
2063     // instruction's encoding. Collect those bits.
2064     if (const RecordVal *EncodedValue = EncodingDef.getValue(Op.second))
2065       if (const BitsInit *OpBits = dyn_cast<BitsInit>(EncodedValue->getValue()))
2066         for (unsigned I = 0; I < OpBits->getNumBits(); ++I)
2067           if (const BitInit *OpBit = dyn_cast<BitInit>(OpBits->getBit(I)))
2068             if (OpBit->getValue())
2069               OpInfo.InitValue |= 1ULL << I;
2070 
2071     unsigned Base = ~0U;
2072     unsigned Width = 0;
2073     unsigned Offset = 0;
2074 
2075     for (unsigned bi = 0; bi < Bits.getNumBits(); ++bi) {
2076       VarInit *Var = nullptr;
2077       VarBitInit *BI = dyn_cast<VarBitInit>(Bits.getBit(bi));
2078       if (BI)
2079         Var = dyn_cast<VarInit>(BI->getBitVar());
2080       else
2081         Var = dyn_cast<VarInit>(Bits.getBit(bi));
2082 
2083       if (!Var) {
2084         if (Base != ~0U) {
2085           OpInfo.addField(Base, Width, Offset);
2086           Base = ~0U;
2087           Width = 0;
2088           Offset = 0;
2089         }
2090         continue;
2091       }
2092 
2093       if (Var->getName() != Op.second &&
2094           Var->getName() != TiedNames[std::string(Op.second)]) {
2095         if (Base != ~0U) {
2096           OpInfo.addField(Base, Width, Offset);
2097           Base = ~0U;
2098           Width = 0;
2099           Offset = 0;
2100         }
2101         continue;
2102       }
2103 
2104       if (Base == ~0U) {
2105         Base = bi;
2106         Width = 1;
2107         Offset = BI ? BI->getBitNum() : 0;
2108       } else if (BI && BI->getBitNum() != Offset + Width) {
2109         OpInfo.addField(Base, Width, Offset);
2110         Base = bi;
2111         Width = 1;
2112         Offset = BI->getBitNum();
2113       } else {
2114         ++Width;
2115       }
2116     }
2117 
2118     if (Base != ~0U)
2119       OpInfo.addField(Base, Width, Offset);
2120 
2121     if (OpInfo.numFields() > 0)
2122       InsnOperands.push_back(OpInfo);
2123   }
2124 
2125   Operands[Opc] = InsnOperands;
2126 
2127 #if 0
2128   LLVM_DEBUG({
2129       // Dumps the instruction encoding bits.
2130       dumpBits(errs(), Bits);
2131 
2132       errs() << '\n';
2133 
2134       // Dumps the list of operand info.
2135       for (unsigned i = 0, e = CGI.Operands.size(); i != e; ++i) {
2136         const CGIOperandList::OperandInfo &Info = CGI.Operands[i];
2137         const std::string &OperandName = Info.Name;
2138         const Record &OperandDef = *Info.Rec;
2139 
2140         errs() << "\t" << OperandName << " (" << OperandDef.getName() << ")\n";
2141       }
2142     });
2143 #endif
2144 
2145   return true;
2146 }
2147 
2148 // emitFieldFromInstruction - Emit the templated helper function
2149 // fieldFromInstruction().
2150 // On Windows we make sure that this function is not inlined when
2151 // using the VS compiler. It has a bug which causes the function
2152 // to be optimized out in some circustances. See llvm.org/pr38292
emitFieldFromInstruction(formatted_raw_ostream & OS)2153 static void emitFieldFromInstruction(formatted_raw_ostream &OS) {
2154   OS << "// Helper functions for extracting fields from encoded instructions.\n"
2155      << "// InsnType must either be integral or an APInt-like object that "
2156         "must:\n"
2157      << "// * be default-constructible and copy-constructible\n"
2158      << "// * be constructible from a uint64_t\n"
2159      << "// * be constructible from an APInt (this can be private)\n"
2160      << "// * Support insertBits(bits, startBit, numBits)\n"
2161      << "// * Support extractBitsAsZExtValue(numBits, startBit)\n"
2162      << "// * be convertible to bool\n"
2163      << "// * Support the ~, &, ==, and != operators with other objects of "
2164         "the same type\n"
2165      << "// * Support put (<<) to raw_ostream&\n"
2166      << "template <typename InsnType>\n"
2167      << "#if defined(_MSC_VER) && !defined(__clang__)\n"
2168      << "__declspec(noinline)\n"
2169      << "#endif\n"
2170      << "static std::enable_if_t<std::is_integral<InsnType>::value, InsnType>\n"
2171      << "fieldFromInstruction(const InsnType &insn, unsigned startBit,\n"
2172      << "                     unsigned numBits) {\n"
2173      << "  assert(startBit + numBits <= 64 && \"Cannot support >64-bit "
2174         "extractions!\");\n"
2175      << "  assert(startBit + numBits <= (sizeof(InsnType) * 8) &&\n"
2176      << "         \"Instruction field out of bounds!\");\n"
2177      << "  InsnType fieldMask;\n"
2178      << "  if (numBits == sizeof(InsnType) * 8)\n"
2179      << "    fieldMask = (InsnType)(-1LL);\n"
2180      << "  else\n"
2181      << "    fieldMask = (((InsnType)1 << numBits) - 1) << startBit;\n"
2182      << "  return (insn & fieldMask) >> startBit;\n"
2183      << "}\n"
2184      << "\n"
2185      << "template <typename InsnType>\n"
2186      << "static std::enable_if_t<!std::is_integral<InsnType>::value, "
2187         "uint64_t>\n"
2188      << "fieldFromInstruction(const InsnType &insn, unsigned startBit,\n"
2189      << "                     unsigned numBits) {\n"
2190      << "  return insn.extractBitsAsZExtValue(numBits, startBit);\n"
2191      << "}\n\n";
2192 }
2193 
2194 // emitInsertBits - Emit the templated helper function insertBits().
emitInsertBits(formatted_raw_ostream & OS)2195 static void emitInsertBits(formatted_raw_ostream &OS) {
2196   OS << "// Helper function for inserting bits extracted from an encoded "
2197         "instruction into\n"
2198      << "// a field.\n"
2199      << "template <typename InsnType>\n"
2200      << "static std::enable_if_t<std::is_integral<InsnType>::value>\n"
2201      << "insertBits(InsnType &field, InsnType bits, unsigned startBit, "
2202         "unsigned numBits) {\n"
2203      << "  assert(startBit + numBits <= sizeof field * 8);\n"
2204      << "  field |= (InsnType)bits << startBit;\n"
2205      << "}\n"
2206      << "\n"
2207      << "template <typename InsnType>\n"
2208      << "static std::enable_if_t<!std::is_integral<InsnType>::value>\n"
2209      << "insertBits(InsnType &field, uint64_t bits, unsigned startBit, "
2210         "unsigned numBits) {\n"
2211      << "  field.insertBits(bits, startBit, numBits);\n"
2212      << "}\n\n";
2213 }
2214 
2215 // emitDecodeInstruction - Emit the templated helper function
2216 // decodeInstruction().
emitDecodeInstruction(formatted_raw_ostream & OS)2217 static void emitDecodeInstruction(formatted_raw_ostream &OS) {
2218   OS << "template <typename InsnType>\n"
2219      << "static DecodeStatus decodeInstruction(const uint8_t DecodeTable[], "
2220         "MCInst &MI,\n"
2221      << "                                      InsnType insn, uint64_t "
2222         "Address,\n"
2223      << "                                      const void *DisAsm,\n"
2224      << "                                      const MCSubtargetInfo &STI) {\n"
2225      << "  const FeatureBitset &Bits = STI.getFeatureBits();\n"
2226      << "\n"
2227      << "  const uint8_t *Ptr = DecodeTable;\n"
2228      << "  InsnType CurFieldValue = 0;\n"
2229      << "  DecodeStatus S = MCDisassembler::Success;\n"
2230      << "  while (true) {\n"
2231      << "    ptrdiff_t Loc = Ptr - DecodeTable;\n"
2232      << "    switch (*Ptr) {\n"
2233      << "    default:\n"
2234      << "      errs() << Loc << \": Unexpected decode table opcode!\\n\";\n"
2235      << "      return MCDisassembler::Fail;\n"
2236      << "    case MCD::OPC_ExtractField: {\n"
2237      << "      unsigned Start = *++Ptr;\n"
2238      << "      unsigned Len = *++Ptr;\n"
2239      << "      ++Ptr;\n"
2240      << "      CurFieldValue = fieldFromInstruction(insn, Start, Len);\n"
2241      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_ExtractField(\" << Start << "
2242         "\", \"\n"
2243      << "                   << Len << \"): \" << CurFieldValue << \"\\n\");\n"
2244      << "      break;\n"
2245      << "    }\n"
2246      << "    case MCD::OPC_FilterValue: {\n"
2247      << "      // Decode the field value.\n"
2248      << "      unsigned Len;\n"
2249      << "      InsnType Val = decodeULEB128(++Ptr, &Len);\n"
2250      << "      Ptr += Len;\n"
2251      << "      // NumToSkip is a plain 24-bit integer.\n"
2252      << "      unsigned NumToSkip = *Ptr++;\n"
2253      << "      NumToSkip |= (*Ptr++) << 8;\n"
2254      << "      NumToSkip |= (*Ptr++) << 16;\n"
2255      << "\n"
2256      << "      // Perform the filter operation.\n"
2257      << "      if (Val != CurFieldValue)\n"
2258      << "        Ptr += NumToSkip;\n"
2259      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_FilterValue(\" << Val << "
2260         "\", \" << NumToSkip\n"
2261      << "                   << \"): \" << ((Val != CurFieldValue) ? \"FAIL:\" "
2262         ": \"PASS:\")\n"
2263      << "                   << \" continuing at \" << (Ptr - DecodeTable) << "
2264         "\"\\n\");\n"
2265      << "\n"
2266      << "      break;\n"
2267      << "    }\n"
2268      << "    case MCD::OPC_CheckField: {\n"
2269      << "      unsigned Start = *++Ptr;\n"
2270      << "      unsigned Len = *++Ptr;\n"
2271      << "      InsnType FieldValue = fieldFromInstruction(insn, Start, Len);\n"
2272      << "      // Decode the field value.\n"
2273      << "      InsnType ExpectedValue = decodeULEB128(++Ptr, &Len);\n"
2274      << "      Ptr += Len;\n"
2275      << "      // NumToSkip is a plain 24-bit integer.\n"
2276      << "      unsigned NumToSkip = *Ptr++;\n"
2277      << "      NumToSkip |= (*Ptr++) << 8;\n"
2278      << "      NumToSkip |= (*Ptr++) << 16;\n"
2279      << "\n"
2280      << "      // If the actual and expected values don't match, skip.\n"
2281      << "      if (ExpectedValue != FieldValue)\n"
2282      << "        Ptr += NumToSkip;\n"
2283      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_CheckField(\" << Start << "
2284         "\", \"\n"
2285      << "                   << Len << \", \" << ExpectedValue << \", \" << "
2286         "NumToSkip\n"
2287      << "                   << \"): FieldValue = \" << FieldValue << \", "
2288         "ExpectedValue = \"\n"
2289      << "                   << ExpectedValue << \": \"\n"
2290      << "                   << ((ExpectedValue == FieldValue) ? \"PASS\\n\" : "
2291         "\"FAIL\\n\"));\n"
2292      << "      break;\n"
2293      << "    }\n"
2294      << "    case MCD::OPC_CheckPredicate: {\n"
2295      << "      unsigned Len;\n"
2296      << "      // Decode the Predicate Index value.\n"
2297      << "      unsigned PIdx = decodeULEB128(++Ptr, &Len);\n"
2298      << "      Ptr += Len;\n"
2299      << "      // NumToSkip is a plain 24-bit integer.\n"
2300      << "      unsigned NumToSkip = *Ptr++;\n"
2301      << "      NumToSkip |= (*Ptr++) << 8;\n"
2302      << "      NumToSkip |= (*Ptr++) << 16;\n"
2303      << "      // Check the predicate.\n"
2304      << "      bool Pred;\n"
2305      << "      if (!(Pred = checkDecoderPredicate(PIdx, Bits)))\n"
2306      << "        Ptr += NumToSkip;\n"
2307      << "      (void)Pred;\n"
2308      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_CheckPredicate(\" << PIdx "
2309         "<< \"): \"\n"
2310      << "            << (Pred ? \"PASS\\n\" : \"FAIL\\n\"));\n"
2311      << "\n"
2312      << "      break;\n"
2313      << "    }\n"
2314      << "    case MCD::OPC_Decode: {\n"
2315      << "      unsigned Len;\n"
2316      << "      // Decode the Opcode value.\n"
2317      << "      unsigned Opc = decodeULEB128(++Ptr, &Len);\n"
2318      << "      Ptr += Len;\n"
2319      << "      unsigned DecodeIdx = decodeULEB128(Ptr, &Len);\n"
2320      << "      Ptr += Len;\n"
2321      << "\n"
2322      << "      MI.clear();\n"
2323      << "      MI.setOpcode(Opc);\n"
2324      << "      bool DecodeComplete;\n"
2325      << "      S = decodeToMCInst(S, DecodeIdx, insn, MI, Address, DisAsm, "
2326         "DecodeComplete);\n"
2327      << "      assert(DecodeComplete);\n"
2328      << "\n"
2329      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_Decode: opcode \" << Opc\n"
2330      << "                   << \", using decoder \" << DecodeIdx << \": \"\n"
2331      << "                   << (S != MCDisassembler::Fail ? \"PASS\" : "
2332         "\"FAIL\") << \"\\n\");\n"
2333      << "      return S;\n"
2334      << "    }\n"
2335      << "    case MCD::OPC_TryDecode: {\n"
2336      << "      unsigned Len;\n"
2337      << "      // Decode the Opcode value.\n"
2338      << "      unsigned Opc = decodeULEB128(++Ptr, &Len);\n"
2339      << "      Ptr += Len;\n"
2340      << "      unsigned DecodeIdx = decodeULEB128(Ptr, &Len);\n"
2341      << "      Ptr += Len;\n"
2342      << "      // NumToSkip is a plain 24-bit integer.\n"
2343      << "      unsigned NumToSkip = *Ptr++;\n"
2344      << "      NumToSkip |= (*Ptr++) << 8;\n"
2345      << "      NumToSkip |= (*Ptr++) << 16;\n"
2346      << "\n"
2347      << "      // Perform the decode operation.\n"
2348      << "      MCInst TmpMI;\n"
2349      << "      TmpMI.setOpcode(Opc);\n"
2350      << "      bool DecodeComplete;\n"
2351      << "      S = decodeToMCInst(S, DecodeIdx, insn, TmpMI, Address, DisAsm, "
2352         "DecodeComplete);\n"
2353      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_TryDecode: opcode \" << "
2354         "Opc\n"
2355      << "                   << \", using decoder \" << DecodeIdx << \": \");\n"
2356      << "\n"
2357      << "      if (DecodeComplete) {\n"
2358      << "        // Decoding complete.\n"
2359      << "        LLVM_DEBUG(dbgs() << (S != MCDisassembler::Fail ? \"PASS\" : "
2360         "\"FAIL\") << \"\\n\");\n"
2361      << "        MI = TmpMI;\n"
2362      << "        return S;\n"
2363      << "      } else {\n"
2364      << "        assert(S == MCDisassembler::Fail);\n"
2365      << "        // If the decoding was incomplete, skip.\n"
2366      << "        Ptr += NumToSkip;\n"
2367      << "        LLVM_DEBUG(dbgs() << \"FAIL: continuing at \" << (Ptr - "
2368         "DecodeTable) << \"\\n\");\n"
2369      << "        // Reset decode status. This also drops a SoftFail status "
2370         "that could be\n"
2371      << "        // set before the decode attempt.\n"
2372      << "        S = MCDisassembler::Success;\n"
2373      << "      }\n"
2374      << "      break;\n"
2375      << "    }\n"
2376      << "    case MCD::OPC_SoftFail: {\n"
2377      << "      // Decode the mask values.\n"
2378      << "      unsigned Len;\n"
2379      << "      InsnType PositiveMask = decodeULEB128(++Ptr, &Len);\n"
2380      << "      Ptr += Len;\n"
2381      << "      InsnType NegativeMask = decodeULEB128(Ptr, &Len);\n"
2382      << "      Ptr += Len;\n"
2383      << "      bool Fail = (insn & PositiveMask) || (~insn & NegativeMask);\n"
2384      << "      if (Fail)\n"
2385      << "        S = MCDisassembler::SoftFail;\n"
2386      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_SoftFail: \" << (Fail ? "
2387         "\"FAIL\\n\" : \"PASS\\n\"));\n"
2388      << "      break;\n"
2389      << "    }\n"
2390      << "    case MCD::OPC_Fail: {\n"
2391      << "      LLVM_DEBUG(dbgs() << Loc << \": OPC_Fail\\n\");\n"
2392      << "      return MCDisassembler::Fail;\n"
2393      << "    }\n"
2394      << "    }\n"
2395      << "  }\n"
2396      << "  llvm_unreachable(\"bogosity detected in disassembler state "
2397         "machine!\");\n"
2398      << "}\n\n";
2399 }
2400 
2401 // Emits disassembler code for instruction decoding.
run(raw_ostream & o)2402 void FixedLenDecoderEmitter::run(raw_ostream &o) {
2403   formatted_raw_ostream OS(o);
2404   OS << "#include \"llvm/MC/MCInst.h\"\n";
2405   OS << "#include \"llvm/Support/DataTypes.h\"\n";
2406   OS << "#include \"llvm/Support/Debug.h\"\n";
2407   OS << "#include \"llvm/Support/LEB128.h\"\n";
2408   OS << "#include \"llvm/Support/raw_ostream.h\"\n";
2409   OS << "#include <assert.h>\n";
2410   OS << '\n';
2411   OS << "namespace llvm {\n\n";
2412 
2413   emitFieldFromInstruction(OS);
2414   emitInsertBits(OS);
2415 
2416   Target.reverseBitsForLittleEndianEncoding();
2417 
2418   // Parameterize the decoders based on namespace and instruction width.
2419   std::set<StringRef> HwModeNames;
2420   const auto &NumberedInstructions = Target.getInstructionsByEnumValue();
2421   NumberedEncodings.reserve(NumberedInstructions.size());
2422   DenseMap<Record *, unsigned> IndexOfInstruction;
2423   // First, collect all HwModes referenced by the target.
2424   for (const auto &NumberedInstruction : NumberedInstructions) {
2425     IndexOfInstruction[NumberedInstruction->TheDef] = NumberedEncodings.size();
2426 
2427     if (const RecordVal *RV =
2428             NumberedInstruction->TheDef->getValue("EncodingInfos")) {
2429       if (auto *DI = dyn_cast_or_null<DefInit>(RV->getValue())) {
2430         const CodeGenHwModes &HWM = Target.getHwModes();
2431         EncodingInfoByHwMode EBM(DI->getDef(), HWM);
2432         for (auto &KV : EBM)
2433           HwModeNames.insert(HWM.getMode(KV.first).Name);
2434       }
2435     }
2436   }
2437 
2438   // If HwModeNames is empty, add the empty string so we always have one HwMode.
2439   if (HwModeNames.empty())
2440     HwModeNames.insert("");
2441 
2442   for (const auto &NumberedInstruction : NumberedInstructions) {
2443     IndexOfInstruction[NumberedInstruction->TheDef] = NumberedEncodings.size();
2444 
2445     if (const RecordVal *RV =
2446             NumberedInstruction->TheDef->getValue("EncodingInfos")) {
2447       if (DefInit *DI = dyn_cast_or_null<DefInit>(RV->getValue())) {
2448         const CodeGenHwModes &HWM = Target.getHwModes();
2449         EncodingInfoByHwMode EBM(DI->getDef(), HWM);
2450         for (auto &KV : EBM) {
2451           NumberedEncodings.emplace_back(KV.second, NumberedInstruction,
2452                                          HWM.getMode(KV.first).Name);
2453           HwModeNames.insert(HWM.getMode(KV.first).Name);
2454         }
2455         continue;
2456       }
2457     }
2458     // This instruction is encoded the same on all HwModes. Emit it for all
2459     // HwModes.
2460     for (StringRef HwModeName : HwModeNames)
2461       NumberedEncodings.emplace_back(NumberedInstruction->TheDef,
2462                                      NumberedInstruction, HwModeName);
2463   }
2464   for (const auto &NumberedAlias : RK.getAllDerivedDefinitions("AdditionalEncoding"))
2465     NumberedEncodings.emplace_back(
2466         NumberedAlias,
2467         &Target.getInstruction(NumberedAlias->getValueAsDef("AliasOf")));
2468 
2469   std::map<std::pair<std::string, unsigned>, std::vector<EncodingIDAndOpcode>>
2470       OpcMap;
2471   std::map<unsigned, std::vector<OperandInfo>> Operands;
2472 
2473   for (unsigned i = 0; i < NumberedEncodings.size(); ++i) {
2474     const Record *EncodingDef = NumberedEncodings[i].EncodingDef;
2475     const CodeGenInstruction *Inst = NumberedEncodings[i].Inst;
2476     const Record *Def = Inst->TheDef;
2477     unsigned Size = EncodingDef->getValueAsInt("Size");
2478     if (Def->getValueAsString("Namespace") == "TargetOpcode" ||
2479         Def->getValueAsBit("isPseudo") ||
2480         Def->getValueAsBit("isAsmParserOnly") ||
2481         Def->getValueAsBit("isCodeGenOnly")) {
2482       NumEncodingsLackingDisasm++;
2483       continue;
2484     }
2485 
2486     if (i < NumberedInstructions.size())
2487       NumInstructions++;
2488     NumEncodings++;
2489 
2490     if (!Size)
2491       continue;
2492 
2493     if (populateInstruction(Target, *EncodingDef, *Inst, i, Operands)) {
2494       std::string DecoderNamespace =
2495           std::string(EncodingDef->getValueAsString("DecoderNamespace"));
2496       if (!NumberedEncodings[i].HwModeName.empty())
2497         DecoderNamespace +=
2498             std::string("_") + NumberedEncodings[i].HwModeName.str();
2499       OpcMap[std::make_pair(DecoderNamespace, Size)].emplace_back(
2500           i, IndexOfInstruction.find(Def)->second);
2501     } else {
2502       NumEncodingsOmitted++;
2503     }
2504   }
2505 
2506   DecoderTableInfo TableInfo;
2507   for (const auto &Opc : OpcMap) {
2508     // Emit the decoder for this namespace+width combination.
2509     ArrayRef<EncodingAndInst> NumberedEncodingsRef(
2510         NumberedEncodings.data(), NumberedEncodings.size());
2511     FilterChooser FC(NumberedEncodingsRef, Opc.second, Operands,
2512                      8 * Opc.first.second, this);
2513 
2514     // The decode table is cleared for each top level decoder function. The
2515     // predicates and decoders themselves, however, are shared across all
2516     // decoders to give more opportunities for uniqueing.
2517     TableInfo.Table.clear();
2518     TableInfo.FixupStack.clear();
2519     TableInfo.Table.reserve(16384);
2520     TableInfo.FixupStack.emplace_back();
2521     FC.emitTableEntries(TableInfo);
2522     // Any NumToSkip fixups in the top level scope can resolve to the
2523     // OPC_Fail at the end of the table.
2524     assert(TableInfo.FixupStack.size() == 1 && "fixup stack phasing error!");
2525     // Resolve any NumToSkip fixups in the current scope.
2526     resolveTableFixups(TableInfo.Table, TableInfo.FixupStack.back(),
2527                        TableInfo.Table.size());
2528     TableInfo.FixupStack.clear();
2529 
2530     TableInfo.Table.push_back(MCD::OPC_Fail);
2531 
2532     // Print the table to the output stream.
2533     emitTable(OS, TableInfo.Table, 0, FC.getBitWidth(), Opc.first.first);
2534     OS.flush();
2535   }
2536 
2537   // Emit the predicate function.
2538   emitPredicateFunction(OS, TableInfo.Predicates, 0);
2539 
2540   // Emit the decoder function.
2541   emitDecoderFunction(OS, TableInfo.Decoders, 0);
2542 
2543   // Emit the main entry point for the decoder, decodeInstruction().
2544   emitDecodeInstruction(OS);
2545 
2546   OS << "\n} // end namespace llvm\n";
2547 }
2548 
2549 namespace llvm {
2550 
EmitFixedLenDecoder(RecordKeeper & RK,raw_ostream & OS,const std::string & PredicateNamespace,const std::string & GPrefix,const std::string & GPostfix,const std::string & ROK,const std::string & RFail,const std::string & L)2551 void EmitFixedLenDecoder(RecordKeeper &RK, raw_ostream &OS,
2552                          const std::string &PredicateNamespace,
2553                          const std::string &GPrefix,
2554                          const std::string &GPostfix, const std::string &ROK,
2555                          const std::string &RFail, const std::string &L) {
2556   FixedLenDecoderEmitter(RK, PredicateNamespace, GPrefix, GPostfix,
2557                          ROK, RFail, L).run(OS);
2558 }
2559 
2560 } // end namespace llvm
2561