Hex Artifact Content
Not logged in

Artifact 1cd66a7d5aec0b0dcc79484932478b81b1e77aa0:

Unrecognized artifact
0000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0010: 3d 0a 54 61 62 6c 65 47 65 6e 20 42 61 63 6b 45  =.TableGen BackE
0020: 6e 64 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  nds.============
0030: 3d 3d 3d 3d 3d 0a 0a 2e 2e 20 63 6f 6e 74 65 6e  =====.... conten
0040: 74 73 3a 3a 0a 20 20 20 3a 6c 6f 63 61 6c 3a 0a  ts::.   :local:.
0050: 0a 49 6e 74 72 6f 64 75 63 74 69 6f 6e 0a 3d 3d  .Introduction.==
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 61 62 6c  ==========..Tabl
0070: 65 47 65 6e 20 62 61 63 6b 65 6e 64 73 20 61 72  eGen backends ar
0080: 65 20 61 74 20 74 68 65 20 63 6f 72 65 20 6f 66  e at the core of
0090: 20 54 61 62 6c 65 47 65 6e 27 73 20 66 75 6e 63   TableGen's func
00a0: 74 69 6f 6e 61 6c 69 74 79 2e 20 54 68 65 20 73  tionality. The s
00b0: 6f 75 72 63 65 20 66 69 6c 65 73 0a 70 72 6f 76  ource files.prov
00c0: 69 64 65 20 74 68 65 20 73 65 6d 61 6e 74 69 63  ide the semantic
00d0: 73 20 74 6f 20 61 20 67 65 6e 65 72 61 74 65 64  s to a generated
00e0: 20 28 69 6e 20 6d 65 6d 6f 72 79 29 20 73 74 72   (in memory) str
00f0: 75 63 74 75 72 65 2c 20 62 75 74 20 69 74 27 73  ucture, but it's
0100: 20 75 70 20 74 6f 20 74 68 65 0a 62 61 63 6b 65   up to the.backe
0110: 6e 64 20 74 6f 20 70 72 69 6e 74 20 74 68 69 73  nd to print this
0120: 20 6f 75 74 20 69 6e 20 61 20 77 61 79 20 74 68   out in a way th
0130: 61 74 20 69 73 20 6d 65 61 6e 69 6e 67 66 75 6c  at is meaningful
0140: 20 74 6f 20 74 68 65 20 75 73 65 72 20 28 6e 6f   to the user (no
0150: 72 6d 61 6c 6c 79 20 61 0a 43 20 70 72 6f 67 72  rmally a.C progr
0160: 61 6d 20 69 6e 63 6c 75 64 69 6e 67 20 61 20 66  am including a f
0170: 69 6c 65 20 6f 72 20 61 20 74 65 78 74 75 61 6c  ile or a textual
0180: 20 6c 69 73 74 20 6f 66 20 77 61 72 6e 69 6e 67   list of warning
0190: 73 2c 20 6f 70 74 69 6f 6e 73 20 61 6e 64 20 65  s, options and e
01a0: 72 72 6f 72 0a 6d 65 73 73 61 67 65 73 29 2e 0a  rror.messages)..
01b0: 0a 54 61 62 6c 65 47 65 6e 20 69 73 20 75 73 65  .TableGen is use
01c0: 64 20 62 79 20 62 6f 74 68 20 4c 4c 56 4d 20 61  d by both LLVM a
01d0: 6e 64 20 43 6c 61 6e 67 20 77 69 74 68 20 76 65  nd Clang with ve
01e0: 72 79 20 64 69 66 66 65 72 65 6e 74 20 67 6f 61  ry different goa
01f0: 6c 73 2e 20 4c 4c 56 4d 20 75 73 65 73 20 69 74  ls. LLVM uses it
0200: 0a 61 73 20 61 20 77 61 79 20 74 6f 20 61 75 74  .as a way to aut
0210: 6f 6d 61 74 65 20 74 68 65 20 67 65 6e 65 72 61  omate the genera
0220: 74 69 6f 6e 20 6f 66 20 6d 61 73 73 69 76 65 20  tion of massive 
0230: 61 6d 6f 75 6e 74 73 20 6f 66 20 69 6e 66 6f 72  amounts of infor
0240: 6d 61 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67  mation regarding
0250: 0a 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 73  .instructions, s
0260: 63 68 65 64 75 6c 65 73 2c 20 63 6f 72 65 73 20  chedules, cores 
0270: 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65  and architecture
0280: 20 66 65 61 74 75 72 65 73 2e 20 53 6f 6d 65 20   features. Some 
0290: 62 61 63 6b 65 6e 64 73 20 67 65 6e 65 72 61 74  backends generat
02a0: 65 0a 6f 75 74 70 75 74 20 74 68 61 74 20 69 73  e.output that is
02b0: 20 63 6f 6e 73 75 6d 65 64 20 62 79 20 6d 6f 72   consumed by mor
02c0: 65 20 74 68 61 6e 20 6f 6e 65 20 73 6f 75 72 63  e than one sourc
02d0: 65 20 66 69 6c 65 2c 20 73 6f 20 74 68 65 79 20  e file, so they 
02e0: 6e 65 65 64 20 74 6f 20 62 65 20 63 72 65 61 74  need to be creat
02f0: 65 64 0a 69 6e 20 61 20 77 61 79 20 74 68 61 74  ed.in a way that
0300: 20 69 73 20 65 61 73 79 20 74 6f 20 75 73 65 20   is easy to use 
0310: 70 72 65 2d 70 72 6f 63 65 73 73 6f 72 20 74 72  pre-processor tr
0320: 69 63 6b 73 2e 20 53 6f 6d 65 20 62 61 63 6b 65  icks. Some backe
0330: 6e 64 73 20 63 61 6e 20 61 6c 73 6f 20 70 72 69  nds can also pri
0340: 6e 74 0a 43 20 63 6f 64 65 20 73 74 72 75 63 74  nt.C code struct
0350: 75 72 65 73 2c 20 73 6f 20 74 68 61 74 20 74 68  ures, so that th
0360: 65 79 20 63 61 6e 20 62 65 20 64 69 72 65 63 74  ey can be direct
0370: 6c 79 20 69 6e 63 6c 75 64 65 64 20 61 73 2d 69  ly included as-i
0380: 73 2e 0a 0a 43 6c 61 6e 67 2c 20 6f 6e 20 74 68  s...Clang, on th
0390: 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 75 73  e other hand, us
03a0: 65 73 20 69 74 20 6d 61 69 6e 6c 79 20 66 6f 72  es it mainly for
03b0: 20 64 69 61 67 6e 6f 73 74 69 63 20 6d 65 73 73   diagnostic mess
03c0: 61 67 65 73 20 28 65 72 72 6f 72 73 2c 0a 77 61  ages (errors,.wa
03d0: 72 6e 69 6e 67 73 2c 20 74 69 70 73 29 20 61 6e  rnings, tips) an
03e0: 64 20 61 74 74 72 69 62 75 74 65 73 2c 20 73 6f  d attributes, so
03f0: 20 6d 6f 72 65 20 6f 6e 20 74 68 65 20 74 65 78   more on the tex
0400: 74 75 61 6c 20 65 6e 64 20 6f 66 20 74 68 65 20  tual end of the 
0410: 73 63 61 6c 65 2e 0a 0a 4c 4c 56 4d 20 42 61 63  scale...LLVM Bac
0420: 6b 45 6e 64 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  kEnds.==========
0430: 3d 3d 3d 0a 0a 2e 2e 20 77 61 72 6e 69 6e 67 3a  ===.... warning:
0440: 3a 0a 20 20 20 54 68 69 73 20 64 6f 63 75 6d 65  :.   This docume
0450: 6e 74 20 69 73 20 72 61 77 2e 20 45 61 63 68 20  nt is raw. Each 
0460: 73 65 63 74 69 6f 6e 20 62 65 6c 6f 77 20 6e 65  section below ne
0470: 65 64 73 20 74 68 72 65 65 20 73 75 62 2d 73 65  eds three sub-se
0480: 63 74 69 6f 6e 73 3a 20 64 65 73 63 72 69 70 74  ctions: descript
0490: 69 6f 6e 0a 20 20 20 6f 66 20 69 74 73 20 70 75  ion.   of its pu
04a0: 72 70 6f 73 65 20 77 69 74 68 20 61 20 6c 69 73  rpose with a lis
04b0: 74 20 6f 66 20 75 73 65 72 73 2c 20 6f 75 74 70  t of users, outp
04c0: 75 74 20 67 65 6e 65 72 61 74 65 64 20 66 72 6f  ut generated fro
04d0: 6d 20 67 65 6e 65 72 69 63 20 69 6e 70 75 74 2c  m generic input,
04e0: 20 61 6e 64 0a 20 20 20 66 69 6e 61 6c 6c 79 20   and.   finally 
04f0: 77 68 79 20 69 74 20 6e 65 65 64 65 64 20 61 20  why it needed a 
0500: 6e 65 77 20 62 61 63 6b 65 6e 64 20 28 69 6e 20  new backend (in 
0510: 63 61 73 65 20 74 68 65 72 65 27 73 20 73 6f 6d  case there's som
0520: 65 74 68 69 6e 67 20 73 69 6d 69 6c 61 72 29 2e  ething similar).
0530: 0a 0a 4f 76 65 72 61 6c 6c 2c 20 65 61 63 68 20  ..Overall, each 
0540: 62 61 63 6b 65 6e 64 20 77 69 6c 6c 20 74 61 6b  backend will tak
0550: 65 20 74 68 65 20 73 61 6d 65 20 54 61 62 6c 65  e the same Table
0560: 47 65 6e 20 66 69 6c 65 20 74 79 70 65 20 61 6e  Gen file type an
0570: 64 20 74 72 61 6e 73 66 6f 72 6d 20 69 6e 74 6f  d transform into
0580: 0a 73 69 6d 69 6c 61 72 20 6f 75 74 70 75 74 20  .similar output 
0590: 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 61  for different ta
05a0: 72 67 65 74 73 2f 75 73 65 73 2e 20 54 68 65 72  rgets/uses. Ther
05b0: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 63 69 74  e is an implicit
05c0: 20 63 6f 6e 74 72 61 63 74 20 62 65 74 77 65 65   contract betwee
05d0: 6e 0a 74 68 65 20 54 61 62 6c 65 47 65 6e 20 66  n.the TableGen f
05e0: 69 6c 65 73 2c 20 74 68 65 20 62 61 63 6b 2d 65  iles, the back-e
05f0: 6e 64 73 20 61 6e 64 20 74 68 65 69 72 20 75 73  nds and their us
0600: 65 72 73 2e 0a 0a 46 6f 72 20 69 6e 73 74 61 6e  ers...For instan
0610: 63 65 2c 20 61 20 67 6c 6f 62 61 6c 20 63 6f 6e  ce, a global con
0620: 74 72 61 63 74 20 69 73 20 74 68 61 74 20 65 61  tract is that ea
0630: 63 68 20 62 61 63 6b 2d 65 6e 64 20 70 72 6f 64  ch back-end prod
0640: 75 63 65 73 20 6d 61 63 72 6f 2d 67 75 61 72 64  uces macro-guard
0650: 65 64 0a 73 65 63 74 69 6f 6e 73 2e 20 42 61 73  ed.sections. Bas
0660: 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ed on whether th
0670: 65 20 66 69 6c 65 20 69 73 20 69 6e 63 6c 75 64  e file is includ
0680: 65 64 20 62 79 20 61 20 68 65 61 64 65 72 20 6f  ed by a header o
0690: 72 20 61 20 73 6f 75 72 63 65 20 66 69 6c 65 2c  r a source file,
06a0: 0a 6f 72 20 65 76 65 6e 20 69 6e 20 77 68 69 63  .or even in whic
06b0: 68 20 63 6f 6e 74 65 78 74 20 6f 66 20 65 61 63  h context of eac
06c0: 68 20 66 69 6c 65 20 74 68 65 20 69 6e 63 6c 75  h file the inclu
06d0: 64 65 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  de is being used
06e0: 2c 20 79 6f 75 20 68 61 76 65 0a 74 6f 64 65 66  , you have.todef
06f0: 69 6e 65 20 61 20 6d 61 63 72 6f 20 6a 75 73 74  ine a macro just
0700: 20 62 65 66 6f 72 65 20 69 6e 63 6c 75 64 69 6e   before includin
0710: 67 20 69 74 2c 20 74 6f 20 67 65 74 20 74 68 65  g it, to get the
0720: 20 72 69 67 68 74 20 6f 75 74 70 75 74 3a 0a 0a   right output:..
0730: 2e 2e 20 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20  .. code-block:: 
0740: 63 2b 2b 0a 0a 20 20 23 64 65 66 69 6e 65 20 47  c++..  #define G
0750: 45 54 5f 52 45 47 49 4e 46 4f 5f 54 41 52 47 45  ET_REGINFO_TARGE
0760: 54 5f 44 45 53 43 0a 20 20 23 69 6e 63 6c 75 64  T_DESC.  #includ
0770: 65 20 22 41 52 4d 47 65 6e 52 65 67 69 73 74 65  e "ARMGenRegiste
0780: 72 49 6e 66 6f 2e 69 6e 63 22 0a 0a 41 6e 64 20  rInfo.inc"..And 
0790: 6a 75 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  just part of the
07a0: 20 67 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20   generated file 
07b0: 77 6f 75 6c 64 20 62 65 20 69 6e 63 6c 75 64 65  would be include
07c0: 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 66 75  d. This is usefu
07d0: 6c 20 69 66 0a 79 6f 75 20 6e 65 65 64 20 74 68  l if.you need th
07e0: 65 20 73 61 6d 65 20 69 6e 66 6f 72 6d 61 74 69  e same informati
07f0: 6f 6e 20 69 6e 20 6d 75 6c 74 69 70 6c 65 20 66  on in multiple f
0800: 6f 72 6d 61 74 73 20 28 69 6e 73 74 61 6e 74 69  ormats (instanti
0810: 61 74 69 6f 6e 2c 20 69 6e 69 74 69 61 6c 69 7a  ation, initializ
0820: 61 74 69 6f 6e 2c 0a 67 65 74 74 65 72 2f 73 65  ation,.getter/se
0830: 74 74 65 72 20 66 75 6e 63 74 69 6f 6e 73 2c 20  tter functions, 
0840: 65 74 63 29 20 66 72 6f 6d 20 74 68 65 20 73 61  etc) from the sa
0850: 6d 65 20 73 6f 75 72 63 65 20 54 61 62 6c 65 47  me source TableG
0860: 65 6e 20 66 69 6c 65 20 77 69 74 68 6f 75 74 20  en file without 
0870: 68 61 76 69 6e 67 0a 74 6f 20 72 65 2d 63 6f 6d  having.to re-com
0880: 70 69 6c 65 20 74 68 65 20 54 61 62 6c 65 47 65  pile the TableGe
0890: 6e 20 66 69 6c 65 20 6d 75 6c 74 69 70 6c 65 20  n file multiple 
08a0: 74 69 6d 65 73 2e 0a 0a 53 6f 6d 65 74 69 6d 65  times...Sometime
08b0: 73 2c 20 6d 75 6c 74 69 70 6c 65 20 6d 61 63 72  s, multiple macr
08c0: 6f 73 20 6d 69 67 68 74 20 62 65 20 64 65 66 69  os might be defi
08d0: 6e 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 73  ned before the s
08e0: 61 6d 65 20 69 6e 63 6c 75 64 65 20 66 69 6c 65  ame include file
08f0: 20 74 6f 0a 6f 75 74 70 75 74 20 6d 75 6c 74 69   to.output multi
0900: 70 6c 65 20 62 6c 6f 63 6b 73 3a 0a 0a 2e 2e 20  ple blocks:.... 
0910: 63 6f 64 65 2d 62 6c 6f 63 6b 3a 3a 20 63 2b 2b  code-block:: c++
0920: 0a 0a 20 20 23 64 65 66 69 6e 65 20 47 45 54 5f  ..  #define GET_
0930: 52 45 47 49 53 54 45 52 5f 4d 41 54 43 48 45 52  REGISTER_MATCHER
0940: 0a 20 20 23 64 65 66 69 6e 65 20 47 45 54 5f 53  .  #define GET_S
0950: 55 42 54 41 52 47 45 54 5f 46 45 41 54 55 52 45  UBTARGET_FEATURE
0960: 5f 4e 41 4d 45 0a 20 20 23 64 65 66 69 6e 65 20  _NAME.  #define 
0970: 47 45 54 5f 4d 41 54 43 48 45 52 5f 49 4d 50 4c  GET_MATCHER_IMPL
0980: 45 4d 45 4e 54 41 54 49 4f 4e 0a 20 20 23 69 6e  EMENTATION.  #in
0990: 63 6c 75 64 65 20 22 41 52 4d 47 65 6e 41 73 6d  clude "ARMGenAsm
09a0: 4d 61 74 63 68 65 72 2e 69 6e 63 22 0a 0a 54 68  Matcher.inc"..Th
09b0: 65 20 6d 61 63 72 6f 73 20 77 69 6c 6c 20 62 65  e macros will be
09c0: 20 75 6e 64 65 66 27 64 20 61 75 74 6f 6d 61 74   undef'd automat
09d0: 69 63 61 6c 6c 79 20 61 73 20 74 68 65 79 27 72  ically as they'r
09e0: 65 20 75 73 65 64 2c 20 69 6e 20 74 68 65 20 69  e used, in the i
09f0: 6e 63 6c 75 64 65 20 66 69 6c 65 2e 0a 0a 4f 6e  nclude file...On
0a00: 20 61 6c 6c 20 4c 4c 56 4d 20 62 61 63 6b 2d 65   all LLVM back-e
0a10: 6e 64 73 2c 20 74 68 65 20 60 60 6c 6c 76 6d 2d  nds, the ``llvm-
0a20: 74 62 6c 67 65 6e 60 60 20 62 69 6e 61 72 79 20  tblgen`` binary 
0a30: 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64  will be executed
0a40: 20 6f 6e 20 74 68 65 20 72 6f 6f 74 0a 54 61 62   on the root.Tab
0a50: 6c 65 47 65 6e 20 66 69 6c 65 20 60 60 3c 54 61  leGen file ``<Ta
0a60: 72 67 65 74 3e 2e 74 64 60 60 2c 20 77 68 69 63  rget>.td``, whic
0a70: 68 20 73 68 6f 75 6c 64 20 69 6e 63 6c 75 64 65  h should include
0a80: 20 61 6c 6c 20 6f 74 68 65 72 73 2e 20 54 68 69   all others. Thi
0a90: 73 20 67 75 61 72 61 6e 74 65 65 73 0a 74 68 61  s guarantees.tha
0aa0: 74 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  t all informatio
0ab0: 6e 20 6e 65 65 64 65 64 20 69 73 20 61 63 63 65  n needed is acce
0ac0: 73 73 69 62 6c 65 2c 20 61 6e 64 20 74 68 61 74  ssible, and that
0ad0: 20 6e 6f 20 64 75 70 6c 69 63 61 74 69 6f 6e 20   no duplication 
0ae0: 69 73 20 6e 65 65 64 65 64 0a 69 6e 20 74 68 65  is needed.in the
0af0: 20 54 61 62 6c 65 47 65 6e 20 66 69 6c 65 73 2e   TableGen files.
0b00: 0a 0a 43 6f 64 65 45 6d 69 74 74 65 72 0a 2d 2d  ..CodeEmitter.--
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72  ---------..**Pur
0b20: 70 6f 73 65 2a 2a 3a 20 43 6f 64 65 45 6d 69 74  pose**: CodeEmit
0b30: 74 65 72 47 65 6e 20 75 73 65 73 20 74 68 65 20  terGen uses the 
0b40: 64 65 73 63 72 69 70 74 69 6f 6e 73 20 6f 66 20  descriptions of 
0b50: 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 61 6e 64  instructions and
0b60: 20 74 68 65 69 72 20 66 69 65 6c 64 73 20 74 6f   their fields to
0b70: 0a 63 6f 6e 73 74 72 75 63 74 20 61 6e 20 61 75  .construct an au
0b80: 74 6f 6d 61 74 65 64 20 63 6f 64 65 20 65 6d 69  tomated code emi
0b90: 74 74 65 72 3a 20 61 20 66 75 6e 63 74 69 6f 6e  tter: a function
0ba0: 20 74 68 61 74 2c 20 67 69 76 65 6e 20 61 20 4d   that, given a M
0bb0: 61 63 68 69 6e 65 49 6e 73 74 72 2c 0a 72 65 74  achineInstr,.ret
0bc0: 75 72 6e 73 20 74 68 65 20 28 63 75 72 72 65 6e  urns the (curren
0bd0: 74 6c 79 2c 20 33 32 2d 62 69 74 20 75 6e 73 69  tly, 32-bit unsi
0be0: 67 6e 65 64 29 20 76 61 6c 75 65 20 6f 66 20 74  gned) value of t
0bf0: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  he instruction..
0c00: 0a 2a 2a 4f 75 74 70 75 74 2a 2a 3a 20 43 2b 2b  .**Output**: C++
0c10: 20 63 6f 64 65 2c 20 69 6d 70 6c 65 6d 65 6e 74   code, implement
0c20: 69 6e 67 20 74 68 65 20 74 61 72 67 65 74 27 73  ing the target's
0c30: 20 43 6f 64 65 45 6d 69 74 74 65 72 0a 63 6c 61   CodeEmitter.cla
0c40: 73 73 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67  ss by overriding
0c50: 20 74 68 65 20 76 69 72 74 75 61 6c 20 66 75 6e   the virtual fun
0c60: 63 74 69 6f 6e 73 20 61 73 20 60 60 3c 54 61 72  ctions as ``<Tar
0c70: 67 65 74 3e 43 6f 64 65 45 6d 69 74 74 65 72 3a  get>CodeEmitter:
0c80: 3a 66 75 6e 63 74 69 6f 6e 28 29 60 60 2e 0a 0a  :function()``...
0c90: 2a 2a 55 73 61 67 65 2a 2a 3a 20 55 73 65 64 20  **Usage**: Used 
0ca0: 74 6f 20 69 6e 63 6c 75 64 65 20 64 69 72 65 63  to include direc
0cb0: 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tly at the end o
0cc0: 66 20 60 60 3c 54 61 72 67 65 74 3e 4d 43 43 6f  f ``<Target>MCCo
0cd0: 64 65 45 6d 69 74 74 65 72 2e 63 70 70 60 60 2e  deEmitter.cpp``.
0ce0: 0a 0a 52 65 67 69 73 74 65 72 49 6e 66 6f 0a 2d  ..RegisterInfo.-
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50  -----------..**P
0d00: 75 72 70 6f 73 65 2a 2a 3a 20 54 68 69 73 20 74  urpose**: This t
0d10: 61 62 6c 65 67 65 6e 20 62 61 63 6b 65 6e 64 20  ablegen backend 
0d20: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
0d30: 6f 72 20 65 6d 69 74 74 69 6e 67 20 61 20 64 65  or emitting a de
0d40: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 61 20 74  scription of a t
0d50: 61 72 67 65 74 0a 72 65 67 69 73 74 65 72 20 66  arget.register f
0d60: 69 6c 65 20 66 6f 72 20 61 20 63 6f 64 65 20 67  ile for a code g
0d70: 65 6e 65 72 61 74 6f 72 2e 20 20 49 74 20 75 73  enerator.  It us
0d80: 65 73 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  es instances of 
0d90: 74 68 65 20 52 65 67 69 73 74 65 72 2c 0a 52 65  the Register,.Re
0da0: 67 69 73 74 65 72 41 6c 69 61 73 65 73 2c 20 61  gisterAliases, a
0db0: 6e 64 20 52 65 67 69 73 74 65 72 43 6c 61 73 73  nd RegisterClass
0dc0: 20 63 6c 61 73 73 65 73 20 74 6f 20 67 61 74 68   classes to gath
0dd0: 65 72 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  er this informat
0de0: 69 6f 6e 2e 0a 0a 2a 2a 4f 75 74 70 75 74 2a 2a  ion...**Output**
0df0: 3a 20 43 2b 2b 20 63 6f 64 65 20 77 69 74 68 20  : C++ code with 
0e00: 65 6e 75 6d 73 20 61 6e 64 20 73 74 72 75 63 74  enums and struct
0e10: 75 72 65 73 20 72 65 70 72 65 73 65 6e 74 69 6e  ures representin
0e20: 67 20 74 68 65 20 72 65 67 69 73 74 65 72 20 6d  g the register m
0e30: 61 70 70 69 6e 67 73 2c 0a 70 72 6f 70 65 72 74  appings,.propert
0e40: 69 65 73 2c 20 6d 61 73 6b 73 2c 20 65 74 63 2e  ies, masks, etc.
0e50: 0a 0a 2a 2a 55 73 61 67 65 2a 2a 3a 20 42 6f 74  ..**Usage**: Bot
0e60: 68 20 6f 6e 20 60 60 3c 54 61 72 67 65 74 3e 42  h on ``<Target>B
0e70: 61 73 65 52 65 67 69 73 74 65 72 49 6e 66 6f 60  aseRegisterInfo`
0e80: 60 20 61 6e 64 20 60 60 3c 54 61 72 67 65 74 3e  ` and ``<Target>
0e90: 4d 43 54 61 72 67 65 74 44 65 73 63 60 60 20 28  MCTargetDesc`` (
0ea0: 68 65 61 64 65 72 73 0a 61 6e 64 20 73 6f 75 72  headers.and sour
0eb0: 63 65 20 66 69 6c 65 73 29 20 77 69 74 68 20 6d  ce files) with m
0ec0: 61 63 72 6f 73 20 64 65 66 69 6e 69 6e 67 20 69  acros defining i
0ed0: 6e 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  n which they are
0ee0: 20 66 6f 72 20 64 65 63 6c 61 72 61 74 69 6f 6e   for declaration
0ef0: 20 76 73 2e 0a 69 6e 69 74 69 61 6c 69 7a 61 74   vs..initializat
0f00: 69 6f 6e 20 69 73 73 75 65 73 2e 0a 0a 49 6e 73  ion issues...Ins
0f10: 74 72 49 6e 66 6f 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  trInfo.---------
0f20: 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 54  ..**Purpose**: T
0f30: 68 69 73 20 74 61 62 6c 65 67 65 6e 20 62 61 63  his tablegen bac
0f40: 6b 65 6e 64 20 69 73 20 72 65 73 70 6f 6e 73 69  kend is responsi
0f50: 62 6c 65 20 66 6f 72 20 65 6d 69 74 74 69 6e 67  ble for emitting
0f60: 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f   a description o
0f70: 66 20 74 68 65 20 74 61 72 67 65 74 0a 69 6e 73  f the target.ins
0f80: 74 72 75 63 74 69 6f 6e 20 73 65 74 20 66 6f 72  truction set for
0f90: 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
0fa0: 74 6f 72 2e 20 28 77 68 61 74 20 61 72 65 20 74  tor. (what are t
0fb0: 68 65 20 64 69 66 66 65 72 65 6e 63 65 73 20 66  he differences f
0fc0: 72 6f 6d 20 43 6f 64 65 45 6d 69 74 74 65 72 3f  rom CodeEmitter?
0fd0: 29 0a 0a 2a 2a 4f 75 74 70 75 74 2a 2a 3a 20 43  )..**Output**: C
0fe0: 2b 2b 20 63 6f 64 65 20 77 69 74 68 20 65 6e 75  ++ code with enu
0ff0: 6d 73 20 61 6e 64 20 73 74 72 75 63 74 75 72 65  ms and structure
1000: 73 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  s representing t
1010: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  he instruction m
1020: 61 70 70 69 6e 67 73 2c 0a 70 72 6f 70 65 72 74  appings,.propert
1030: 69 65 73 2c 20 6d 61 73 6b 73 2c 20 65 74 63 2e  ies, masks, etc.
1040: 0a 0a 2a 2a 55 73 61 67 65 2a 2a 3a 20 42 6f 74  ..**Usage**: Bot
1050: 68 20 6f 6e 20 60 60 3c 54 61 72 67 65 74 3e 42  h on ``<Target>B
1060: 61 73 65 49 6e 73 74 72 49 6e 66 6f 60 60 20 61  aseInstrInfo`` a
1070: 6e 64 20 60 60 3c 54 61 72 67 65 74 3e 4d 43 54  nd ``<Target>MCT
1080: 61 72 67 65 74 44 65 73 63 60 60 20 28 68 65 61  argetDesc`` (hea
1090: 64 65 72 73 0a 61 6e 64 20 73 6f 75 72 63 65 20  ders.and source 
10a0: 66 69 6c 65 73 29 20 77 69 74 68 20 6d 61 63 72  files) with macr
10b0: 6f 73 20 64 65 66 69 6e 69 6e 67 20 69 6e 20 77  os defining in w
10c0: 68 69 63 68 20 74 68 65 79 20 61 72 65 20 66 6f  hich they are fo
10d0: 72 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 76 73  r declaration vs
10e0: 2e 0a 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  ..initialization
10f0: 20 69 73 73 75 65 73 2e 0a 0a 41 73 6d 57 72 69   issues...AsmWri
1100: 74 65 72 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a  ter.---------..*
1110: 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 45 6d 69 74  *Purpose**: Emit
1120: 73 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 70 72  s an assembly pr
1130: 69 6e 74 65 72 20 66 6f 72 20 74 68 65 20 63 75  inter for the cu
1140: 72 72 65 6e 74 20 74 61 72 67 65 74 2e 0a 0a 2a  rrent target...*
1150: 2a 4f 75 74 70 75 74 2a 2a 3a 20 49 6d 70 6c 65  *Output**: Imple
1160: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 60 60 3c  mentation of ``<
1170: 54 61 72 67 65 74 3e 49 6e 73 74 50 72 69 6e 74  Target>InstPrint
1180: 65 72 3a 3a 70 72 69 6e 74 49 6e 73 74 72 75 63  er::printInstruc
1190: 74 69 6f 6e 28 29 60 60 2c 20 61 6d 6f 6e 67 0a  tion()``, among.
11a0: 6f 74 68 65 72 20 74 68 69 6e 67 73 2e 0a 0a 2a  other things...*
11b0: 2a 55 73 61 67 65 2a 2a 3a 20 49 6e 63 6c 75 64  *Usage**: Includ
11c0: 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 74 6f  ed directly into
11d0: 20 60 60 49 6e 73 74 50 72 69 6e 74 65 72 2f 3c   ``InstPrinter/<
11e0: 54 61 72 67 65 74 3e 49 6e 73 74 50 72 69 6e 74  Target>InstPrint
11f0: 65 72 2e 63 70 70 60 60 2e 0a 0a 41 73 6d 4d 61  er.cpp``...AsmMa
1200: 74 63 68 65 72 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  tcher.----------
1210: 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 45  ..**Purpose**: E
1220: 6d 69 74 73 20 61 20 74 61 72 67 65 74 20 73 70  mits a target sp
1230: 65 63 69 66 69 65 72 20 6d 61 74 63 68 65 72 20  ecifier matcher 
1240: 66 6f 72 0a 63 6f 6e 76 65 72 74 69 6e 67 20 70  for.converting p
1250: 61 72 73 65 64 20 61 73 73 65 6d 62 6c 79 20 6f  arsed assembly o
1260: 70 65 72 61 6e 64 73 20 69 6e 20 74 68 65 20 4d  perands in the M
1270: 43 49 6e 73 74 20 73 74 72 75 63 74 75 72 65 73  CInst structures
1280: 2e 20 49 74 20 61 6c 73 6f 0a 65 6d 69 74 73 20  . It also.emits 
1290: 61 20 6d 61 74 63 68 65 72 20 66 6f 72 20 63 75  a matcher for cu
12a0: 73 74 6f 6d 20 6f 70 65 72 61 6e 64 20 70 61 72  stom operand par
12b0: 73 69 6e 67 2e 20 45 78 74 65 6e 73 69 76 65 20  sing. Extensive 
12c0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 69 73  documentation is
12d0: 0a 77 72 69 74 74 65 6e 20 6f 6e 20 74 68 65 20  .written on the 
12e0: 60 60 41 73 6d 4d 61 74 63 68 65 72 45 6d 69 74  ``AsmMatcherEmit
12f0: 74 65 72 2e 63 70 70 60 60 20 66 69 6c 65 2e 0a  ter.cpp`` file..
1300: 0a 2a 2a 4f 75 74 70 75 74 2a 2a 3a 20 41 73 73  .**Output**: Ass
1310: 65 6d 62 6c 65 72 20 70 61 72 73 65 72 73 27 20  embler parsers' 
1320: 6d 61 74 63 68 65 72 20 66 75 6e 63 74 69 6f 6e  matcher function
1330: 73 2c 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2c  s, declarations,
1340: 20 65 74 63 2e 0a 0a 2a 2a 55 73 61 67 65 2a 2a   etc...**Usage**
1350: 3a 20 55 73 65 64 20 69 6e 20 62 61 63 6b 2d 65  : Used in back-e
1360: 6e 64 73 27 20 60 60 41 73 6d 50 61 72 73 65 72  nds' ``AsmParser
1370: 2f 3c 54 61 72 67 65 74 3e 41 73 6d 50 61 72 73  /<Target>AsmPars
1380: 65 72 2e 63 70 70 60 60 20 66 6f 72 0a 62 75 69  er.cpp`` for.bui
1390: 6c 64 69 6e 67 20 74 68 65 20 41 73 6d 50 61 72  lding the AsmPar
13a0: 73 65 72 20 63 6c 61 73 73 2e 0a 0a 44 69 73 61  ser class...Disa
13b0: 73 73 65 6d 62 6c 65 72 0a 2d 2d 2d 2d 2d 2d 2d  ssembler.-------
13c0: 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65  -----..**Purpose
13d0: 2a 2a 3a 20 43 6f 6e 74 61 69 6e 73 20 64 69 73  **: Contains dis
13e0: 61 73 73 65 6d 62 6c 65 72 20 74 61 62 6c 65 20  assembler table 
13f0: 65 6d 69 74 74 65 72 73 20 66 6f 72 20 76 61 72  emitters for var
1400: 69 6f 75 73 0a 61 72 63 68 69 74 65 63 74 75 72  ious.architectur
1410: 65 73 2e 20 45 78 74 65 6e 73 69 76 65 20 64 6f  es. Extensive do
1420: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 77  cumentation is w
1430: 72 69 74 74 65 6e 20 6f 6e 20 74 68 65 0a 60 60  ritten on the.``
1440: 44 69 73 61 73 73 65 6d 62 6c 65 72 45 6d 69 74  DisassemblerEmit
1450: 74 65 72 2e 63 70 70 60 60 20 66 69 6c 65 2e 0a  ter.cpp`` file..
1460: 0a 2a 2a 4f 75 74 70 75 74 2a 2a 3a 20 44 65 63  .**Output**: Dec
1470: 6f 64 69 6e 67 20 74 61 62 6c 65 73 2c 20 73 74  oding tables, st
1480: 61 74 69 63 20 64 65 63 6f 64 69 6e 67 20 66 75  atic decoding fu
1490: 6e 63 74 69 6f 6e 73 2c 20 65 74 63 2e 0a 0a 2a  nctions, etc...*
14a0: 2a 55 73 61 67 65 2a 2a 3a 20 44 69 72 65 63 74  *Usage**: Direct
14b0: 6c 79 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 60  ly included in `
14c0: 60 44 69 73 61 73 73 65 6d 62 6c 65 72 2f 3c 54  `Disassembler/<T
14d0: 61 72 67 65 74 3e 44 69 73 61 73 73 65 6d 62 6c  arget>Disassembl
14e0: 65 72 2e 63 70 70 60 60 0a 74 6f 20 63 61 74 65  er.cpp``.to cate
14f0: 72 20 66 6f 72 20 61 6c 6c 20 64 65 66 61 75 6c  r for all defaul
1500: 74 20 64 65 63 6f 64 69 6e 67 73 2c 20 61 66 74  t decodings, aft
1510: 65 72 20 61 6c 6c 20 68 61 6e 64 2d 6d 61 64 65  er all hand-made
1520: 20 6f 6e 65 73 2e 0a 0a 50 73 65 75 64 6f 4c 6f   ones...PseudoLo
1530: 77 65 72 69 6e 67 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  wering.---------
1540: 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65  -----..**Purpose
1550: 2a 2a 3a 20 47 65 6e 65 72 61 74 65 20 70 73 65  **: Generate pse
1560: 75 64 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  udo instruction 
1570: 6c 6f 77 65 72 69 6e 67 2e 0a 0a 2a 2a 4f 75 74  lowering...**Out
1580: 70 75 74 2a 2a 3a 20 49 6d 70 6c 65 6d 65 6e 74  put**: Implement
1590: 73 20 60 60 3c 54 61 72 67 65 74 3e 41 73 6d 50  s ``<Target>AsmP
15a0: 72 69 6e 74 65 72 3a 3a 65 6d 69 74 50 73 65 75  rinter::emitPseu
15b0: 64 6f 45 78 70 61 6e 73 69 6f 6e 4c 6f 77 65 72  doExpansionLower
15c0: 69 6e 67 28 29 60 60 2e 0a 0a 2a 2a 55 73 61 67  ing()``...**Usag
15d0: 65 2a 2a 3a 20 49 6e 63 6c 75 64 65 64 20 64 69  e**: Included di
15e0: 72 65 63 74 6c 79 20 69 6e 74 6f 20 60 60 3c 54  rectly into ``<T
15f0: 61 72 67 65 74 3e 41 73 6d 50 72 69 6e 74 65 72  arget>AsmPrinter
1600: 2e 63 70 70 60 60 2e 0a 0a 43 61 6c 6c 69 6e 67  .cpp``...Calling
1610: 43 6f 6e 76 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  Conv.-----------
1620: 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 52  ..**Purpose**: R
1630: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 65  esponsible for e
1640: 6d 69 74 74 69 6e 67 20 64 65 73 63 72 69 70 74  mitting descript
1650: 69 6f 6e 73 20 6f 66 20 74 68 65 20 63 61 6c 6c  ions of the call
1660: 69 6e 67 0a 63 6f 6e 76 65 6e 74 69 6f 6e 73 20  ing.conventions 
1670: 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 69  supported by thi
1680: 73 20 74 61 72 67 65 74 2e 0a 0a 2a 2a 4f 75 74  s target...**Out
1690: 70 75 74 2a 2a 3a 20 49 6d 70 6c 65 6d 65 6e 74  put**: Implement
16a0: 20 73 74 61 74 69 63 20 66 75 6e 63 74 69 6f 6e   static function
16b0: 73 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 63  s to deal with c
16c0: 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f  alling conventio
16d0: 6e 73 0a 63 68 61 69 6e 65 64 20 62 79 20 6d 61  ns.chained by ma
16e0: 74 63 68 69 6e 67 20 73 74 79 6c 65 73 2c 20 72  tching styles, r
16f0: 65 74 75 72 6e 69 6e 67 20 66 61 6c 73 65 20 6f  eturning false o
1700: 6e 20 6e 6f 20 6d 61 74 63 68 2e 0a 0a 2a 2a 55  n no match...**U
1710: 73 61 67 65 2a 2a 3a 20 55 73 65 64 20 69 6e 20  sage**: Used in 
1720: 49 53 65 6c 4c 6f 77 65 72 69 6e 67 20 61 6e 64  ISelLowering and
1730: 20 46 61 73 74 49 73 65 6c 20 61 73 20 66 75 6e   FastIsel as fun
1740: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 73 20 74  ction pointers t
1750: 6f 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  o.implementation
1760: 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 43   returned by a C
1770: 43 20 73 65 6c 65 63 74 69 6f 6e 20 66 75 6e 63  C selection func
1780: 74 69 6f 6e 2e 0a 0a 44 41 47 49 53 65 6c 0a 2d  tion...DAGISel.-
1790: 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73  ------..**Purpos
17a0: 65 2a 2a 3a 20 47 65 6e 65 72 61 74 65 20 61 20  e**: Generate a 
17b0: 44 41 47 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  DAG instruction 
17c0: 73 65 6c 65 63 74 6f 72 2e 0a 0a 2a 2a 4f 75 74  selector...**Out
17d0: 70 75 74 2a 2a 3a 20 43 72 65 61 74 65 73 20 68  put**: Creates h
17e0: 75 67 65 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  uge functions fo
17f0: 72 20 61 75 74 6f 6d 61 74 69 6e 67 20 44 41 47  r automating DAG
1800: 20 73 65 6c 65 63 74 69 6f 6e 2e 0a 0a 2a 2a 55   selection...**U
1810: 73 61 67 65 2a 2a 3a 20 49 6e 63 6c 75 64 65 64  sage**: Included
1820: 20 69 6e 20 60 60 3c 54 61 72 67 65 74 3e 49 53   in ``<Target>IS
1830: 65 6c 44 41 47 54 6f 44 41 47 2e 63 70 70 60 60  elDAGToDAG.cpp``
1840: 20 69 6e 73 69 64 65 20 74 68 65 20 74 61 72 67   inside the targ
1850: 65 74 27 73 0a 69 6d 70 6c 65 6d 65 6e 74 61 74  et's.implementat
1860: 69 6f 6e 20 6f 66 20 60 60 53 65 6c 65 63 74 69  ion of ``Selecti
1870: 6f 6e 44 41 47 49 53 65 6c 60 60 2e 0a 0a 44 46  onDAGISel``...DF
1880: 41 50 61 63 6b 65 74 69 7a 65 72 0a 2d 2d 2d 2d  APacketizer.----
1890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72  ---------..**Pur
18a0: 70 6f 73 65 2a 2a 3a 20 54 68 69 73 20 63 6c 61  pose**: This cla
18b0: 73 73 20 70 61 72 73 65 73 20 74 68 65 20 53 63  ss parses the Sc
18c0: 68 65 64 75 6c 65 2e 74 64 20 66 69 6c 65 20 61  hedule.td file a
18d0: 6e 64 20 70 72 6f 64 75 63 65 73 20 61 6e 20 41  nd produces an A
18e0: 50 49 20 74 68 61 74 0a 63 61 6e 20 62 65 20 75  PI that.can be u
18f0: 73 65 64 20 74 6f 20 72 65 61 73 6f 6e 20 61 62  sed to reason ab
1900: 6f 75 74 20 77 68 65 74 68 65 72 20 61 6e 20 69  out whether an i
1910: 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 6e 20 62  nstruction can b
1920: 65 20 61 64 64 65 64 20 74 6f 20 61 20 70 61 63  e added to a pac
1930: 6b 65 74 0a 6f 6e 20 61 20 56 4c 49 57 20 61 72  ket.on a VLIW ar
1940: 63 68 69 74 65 63 74 75 72 65 2e 20 54 68 65 20  chitecture. The 
1950: 63 6c 61 73 73 20 69 6e 74 65 72 6e 61 6c 6c 79  class internally
1960: 20 67 65 6e 65 72 61 74 65 73 20 61 20 64 65 74   generates a det
1970: 65 72 6d 69 6e 69 73 74 69 63 20 66 69 6e 69 74  erministic finit
1980: 65 0a 61 75 74 6f 6d 61 74 6f 6e 20 28 44 46 41  e.automaton (DFA
1990: 29 20 74 68 61 74 20 6d 6f 64 65 6c 73 20 61 6c  ) that models al
19a0: 6c 20 70 6f 73 73 69 62 6c 65 20 6d 61 70 70 69  l possible mappi
19b0: 6e 67 73 20 6f 66 20 6d 61 63 68 69 6e 65 20 69  ngs of machine i
19c0: 6e 73 74 72 75 63 74 69 6f 6e 73 0a 74 6f 20 66  nstructions.to f
19d0: 75 6e 63 74 69 6f 6e 61 6c 20 75 6e 69 74 73 20  unctional units 
19e0: 61 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  as instructions 
19f0: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 20 70  are added to a p
1a00: 61 63 6b 65 74 2e 0a 0a 2a 2a 4f 75 74 70 75 74  acket...**Output
1a10: 2a 2a 3a 20 53 63 68 65 64 75 6c 69 6e 67 20 74  **: Scheduling t
1a20: 61 62 6c 65 73 20 66 6f 72 20 47 50 55 20 62 61  ables for GPU ba
1a30: 63 6b 2d 65 6e 64 73 20 28 48 65 78 61 67 6f 6e  ck-ends (Hexagon
1a40: 2c 20 41 4d 44 29 2e 0a 0a 2a 2a 55 73 61 67 65  , AMD)...**Usage
1a50: 2a 2a 3a 20 49 6e 63 6c 75 64 65 64 20 64 69 72  **: Included dir
1a60: 65 63 74 6c 79 20 6f 6e 20 60 60 3c 54 61 72 67  ectly on ``<Targ
1a70: 65 74 3e 49 6e 73 74 72 49 6e 66 6f 2e 63 70 70  et>InstrInfo.cpp
1a80: 60 60 2e 0a 0a 46 61 73 74 49 53 65 6c 0a 2d 2d  ``...FastISel.--
1a90: 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73  ------..**Purpos
1aa0: 65 2a 2a 3a 20 54 68 69 73 20 74 61 62 6c 65 67  e**: This tableg
1ab0: 65 6e 20 62 61 63 6b 65 6e 64 20 65 6d 69 74 73  en backend emits
1ac0: 20 63 6f 64 65 20 66 6f 72 20 75 73 65 20 62 79   code for use by
1ad0: 20 74 68 65 20 22 66 61 73 74 22 0a 69 6e 73 74   the "fast".inst
1ae0: 72 75 63 74 69 6f 6e 20 73 65 6c 65 63 74 69 6f  ruction selectio
1af0: 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 53 65 65  n algorithm. See
1b00: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 61 74   the comments at
1b10: 20 74 68 65 20 74 6f 70 20 6f 66 0a 6c 69 62 2f   the top of.lib/
1b20: 43 6f 64 65 47 65 6e 2f 53 65 6c 65 63 74 69 6f  CodeGen/Selectio
1b30: 6e 44 41 47 2f 46 61 73 74 49 53 65 6c 2e 63 70  nDAG/FastISel.cp
1b40: 70 20 66 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64  p for background
1b50: 2e 20 54 68 69 73 20 66 69 6c 65 0a 73 63 61 6e  . This file.scan
1b60: 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 61  s through the ta
1b70: 72 67 65 74 27 73 20 74 61 62 6c 65 67 65 6e 20  rget's tablegen 
1b80: 69 6e 73 74 72 75 63 74 69 6f 6e 2d 69 6e 66 6f  instruction-info
1b90: 20 66 69 6c 65 73 0a 61 6e 64 20 65 78 74 72 61   files.and extra
1ba0: 63 74 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  cts instructions
1bb0: 20 77 69 74 68 20 6f 62 76 69 6f 75 73 2d 6c 6f   with obvious-lo
1bc0: 6f 6b 69 6e 67 20 70 61 74 74 65 72 6e 73 2c 20  oking patterns, 
1bd0: 61 6e 64 20 69 74 20 65 6d 69 74 73 0a 63 6f 64  and it emits.cod
1be0: 65 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 74 68 65  e to look up the
1bf0: 73 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  se instructions 
1c00: 62 79 20 74 79 70 65 20 61 6e 64 20 6f 70 65 72  by type and oper
1c10: 61 74 6f 72 2e 0a 0a 2a 2a 4f 75 74 70 75 74 2a  ator...**Output*
1c20: 2a 3a 20 47 65 6e 65 72 61 74 65 73 20 60 60 50  *: Generates ``P
1c30: 72 65 64 69 63 61 74 65 60 60 20 61 6e 64 20 60  redicate`` and `
1c40: 60 46 61 73 74 45 6d 69 74 60 60 20 6d 65 74 68  `FastEmit`` meth
1c50: 6f 64 73 2e 0a 0a 2a 2a 55 73 61 67 65 2a 2a 3a  ods...**Usage**:
1c60: 20 49 6d 70 6c 65 6d 65 6e 74 73 20 70 72 69 76   Implements priv
1c70: 61 74 65 20 6d 65 74 68 6f 64 73 20 6f 66 20 74  ate methods of t
1c80: 68 65 20 74 61 72 67 65 74 73 27 20 69 6d 70 6c  he targets' impl
1c90: 65 6d 65 6e 74 61 74 69 6f 6e 0a 6f 66 20 60 60  ementation.of ``
1ca0: 46 61 73 74 49 53 65 6c 60 60 20 63 6c 61 73 73  FastISel`` class
1cb0: 2e 0a 0a 53 75 62 74 61 72 67 65 74 0a 2d 2d 2d  ...Subtarget.---
1cc0: 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73  ------..**Purpos
1cd0: 65 2a 2a 3a 20 47 65 6e 65 72 61 74 65 20 73 75  e**: Generate su
1ce0: 62 74 61 72 67 65 74 20 65 6e 75 6d 65 72 61 74  btarget enumerat
1cf0: 69 6f 6e 73 2e 0a 0a 2a 2a 4f 75 74 70 75 74 2a  ions...**Output*
1d00: 2a 3a 20 45 6e 75 6d 73 2c 20 67 6c 6f 62 61 6c  *: Enums, global
1d10: 73 2c 20 6c 6f 63 61 6c 20 74 61 62 6c 65 73 20  s, local tables 
1d20: 66 6f 72 20 73 75 62 2d 74 61 72 67 65 74 20 69  for sub-target i
1d30: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 2a 2a 55  nformation...**U
1d40: 73 61 67 65 2a 2a 3a 20 50 6f 70 75 6c 61 74 65  sage**: Populate
1d50: 73 20 60 60 3c 54 61 72 67 65 74 3e 53 75 62 74  s ``<Target>Subt
1d60: 61 72 67 65 74 60 60 20 61 6e 64 0a 60 60 4d 43  arget`` and.``MC
1d70: 54 61 72 67 65 74 44 65 73 63 2f 3c 54 61 72 67  TargetDesc/<Targ
1d80: 65 74 3e 4d 43 54 61 72 67 65 74 44 65 73 63 60  et>MCTargetDesc`
1d90: 60 20 66 69 6c 65 73 20 28 62 6f 74 68 20 68 65  ` files (both he
1da0: 61 64 65 72 73 20 61 6e 64 20 73 6f 75 72 63 65  aders and source
1db0: 29 2e 0a 0a 49 6e 74 72 69 6e 73 69 63 0a 2d 2d  )...Intrinsic.--
1dc0: 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f  -------..**Purpo
1dd0: 73 65 2a 2a 3a 20 47 65 6e 65 72 61 74 65 20 28  se**: Generate (
1de0: 74 61 72 67 65 74 29 20 69 6e 74 72 69 6e 73 69  target) intrinsi
1df0: 63 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a  c information...
1e00: 4f 70 74 50 61 72 73 65 72 44 65 66 73 0a 2d 2d  OptParserDefs.--
1e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50  -----------..**P
1e20: 75 72 70 6f 73 65 2a 2a 3a 20 50 72 69 6e 74 20  urpose**: Print 
1e30: 65 6e 75 6d 20 76 61 6c 75 65 73 20 66 6f 72 20  enum values for 
1e40: 61 20 63 6c 61 73 73 2e 0a 0a 43 54 61 67 73 0a  a class...CTags.
1e50: 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65  -----..**Purpose
1e60: 2a 2a 3a 20 54 68 69 73 20 74 61 62 6c 65 67 65  **: This tablege
1e70: 6e 20 62 61 63 6b 65 6e 64 20 65 6d 69 74 73 20  n backend emits 
1e80: 61 6e 20 69 6e 64 65 78 20 6f 66 20 64 65 66 69  an index of defi
1e90: 6e 69 74 69 6f 6e 73 20 69 6e 20 63 74 61 67 73  nitions in ctags
1ea0: 28 31 29 0a 66 6f 72 6d 61 74 2e 20 41 20 68 65  (1).format. A he
1eb0: 6c 70 65 72 20 73 63 72 69 70 74 2c 20 75 74 69  lper script, uti
1ec0: 6c 73 2f 54 61 62 6c 65 47 65 6e 2f 74 64 74 61  ls/TableGen/tdta
1ed0: 67 73 2c 20 70 72 6f 76 69 64 65 73 20 61 6e 20  gs, provides an 
1ee0: 65 61 73 69 65 72 2d 74 6f 2d 75 73 65 0a 69 6e  easier-to-use.in
1ef0: 74 65 72 66 61 63 65 3b 20 72 75 6e 20 27 74 64  terface; run 'td
1f00: 74 61 67 73 20 2d 48 27 20 66 6f 72 20 64 6f 63  tags -H' for doc
1f10: 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a 0a 58 38 36  umentation...X86
1f20: 45 56 45 58 32 56 45 58 0a 2d 2d 2d 2d 2d 2d 2d  EVEX2VEX.-------
1f30: 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a  ----..**Purpose*
1f40: 2a 3a 20 54 68 69 73 20 58 38 36 20 73 70 65 63  *: This X86 spec
1f50: 69 66 69 63 20 74 61 62 6c 65 67 65 6e 20 62 61  ific tablegen ba
1f60: 63 6b 65 6e 64 20 65 6d 69 74 73 20 74 61 62 6c  ckend emits tabl
1f70: 65 73 20 74 68 61 74 20 6d 61 70 20 45 56 45 58  es that map EVEX
1f80: 0a 65 6e 63 6f 64 65 64 20 69 6e 73 74 72 75 63  .encoded instruc
1f90: 74 69 6f 6e 73 20 74 6f 20 74 68 65 69 72 20 56  tions to their V
1fa0: 45 58 20 65 6e 63 6f 64 65 64 20 69 64 65 6e 74  EX encoded ident
1fb0: 69 63 61 6c 20 69 6e 73 74 72 75 63 74 69 6f 6e  ical instruction
1fc0: 2e 0a 0a 43 6c 61 6e 67 20 42 61 63 6b 45 6e 64  ...Clang BackEnd
1fd0: 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  s.==============
1fe0: 0a 0a 43 6c 61 6e 67 41 74 74 72 43 6c 61 73 73  ..ClangAttrClass
1ff0: 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  es.-------------
2000: 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a  ---..**Purpose**
2010: 3a 20 43 72 65 61 74 65 73 20 41 74 74 72 73 2e  : Creates Attrs.
2020: 69 6e 63 2c 20 77 68 69 63 68 20 63 6f 6e 74 61  inc, which conta
2030: 69 6e 73 20 73 65 6d 61 6e 74 69 63 20 61 74 74  ins semantic att
2040: 72 69 62 75 74 65 20 63 6c 61 73 73 0a 64 65 63  ribute class.dec
2050: 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e  larations for an
2060: 79 20 61 74 74 72 69 62 75 74 65 20 69 6e 20 60  y attribute in `
2070: 60 41 74 74 72 2e 74 64 60 60 20 74 68 61 74 20  `Attr.td`` that 
2080: 68 61 73 20 6e 6f 74 20 73 65 74 20 60 60 41 53  has not set ``AS
2090: 54 4e 6f 64 65 20 3d 20 30 60 60 2e 0a 54 68 69  TNode = 0``..Thi
20a0: 73 20 66 69 6c 65 20 69 73 20 69 6e 63 6c 75 64  s file is includ
20b0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 60 60  ed as part of ``
20c0: 41 74 74 72 2e 68 60 60 2e 0a 0a 43 6c 61 6e 67  Attr.h``...Clang
20d0: 41 74 74 72 50 61 72 73 65 72 53 74 72 69 6e 67  AttrParserString
20e0: 53 77 69 74 63 68 65 73 0a 2d 2d 2d 2d 2d 2d 2d  Switches.-------
20f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2100: 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73  ------..**Purpos
2110: 65 2a 2a 3a 20 43 72 65 61 74 65 73 20 41 74 74  e**: Creates Att
2120: 72 50 61 72 73 65 72 53 74 72 69 6e 67 53 77 69  rParserStringSwi
2130: 74 63 68 65 73 2e 69 6e 63 2c 20 77 68 69 63 68  tches.inc, which
2140: 20 63 6f 6e 74 61 69 6e 73 0a 53 74 72 69 6e 67   contains.String
2150: 53 77 69 74 63 68 3a 3a 43 61 73 65 20 73 74 61  Switch::Case sta
2160: 74 65 6d 65 6e 74 73 20 66 6f 72 20 70 61 72 73  tements for pars
2170: 65 72 2d 72 65 6c 61 74 65 64 20 73 74 72 69 6e  er-related strin
2180: 67 20 73 77 69 74 63 68 65 73 2e 20 45 61 63 68  g switches. Each
2190: 20 73 77 69 74 63 68 0a 69 73 20 67 69 76 65 6e   switch.is given
21a0: 20 69 74 73 20 6f 77 6e 20 6d 61 63 72 6f 20 28   its own macro (
21b0: 73 75 63 68 20 61 73 20 60 60 43 4c 41 4e 47 5f  such as ``CLANG_
21c0: 41 54 54 52 5f 41 52 47 5f 43 4f 4e 54 45 58 54  ATTR_ARG_CONTEXT
21d0: 5f 4c 49 53 54 60 60 2c 20 6f 72 0a 60 60 43 4c  _LIST``, or.``CL
21e0: 41 4e 47 5f 41 54 54 52 5f 49 44 45 4e 54 49 46  ANG_ATTR_IDENTIF
21f0: 49 45 52 5f 41 52 47 5f 4c 49 53 54 60 60 29 2c  IER_ARG_LIST``),
2200: 20 77 68 69 63 68 20 69 73 20 65 78 70 65 63 74   which is expect
2210: 65 64 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  ed to be defined
2220: 20 62 65 66 6f 72 65 0a 69 6e 63 6c 75 64 69 6e   before.includin
2230: 67 20 41 74 74 72 50 61 72 73 65 72 53 74 72 69  g AttrParserStri
2240: 6e 67 53 77 69 74 63 68 65 73 2e 69 6e 63 2c 20  ngSwitches.inc, 
2250: 61 6e 64 20 75 6e 64 65 66 69 6e 65 64 20 61 66  and undefined af
2260: 74 65 72 2e 0a 0a 43 6c 61 6e 67 41 74 74 72 49  ter...ClangAttrI
2270: 6d 70 6c 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mpl.------------
2280: 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20  -..**Purpose**: 
2290: 43 72 65 61 74 65 73 20 41 74 74 72 49 6d 70 6c  Creates AttrImpl
22a0: 2e 69 6e 63 2c 20 77 68 69 63 68 20 63 6f 6e 74  .inc, which cont
22b0: 61 69 6e 73 20 73 65 6d 61 6e 74 69 63 20 61 74  ains semantic at
22c0: 74 72 69 62 75 74 65 20 63 6c 61 73 73 0a 64 65  tribute class.de
22d0: 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 61 6e  finitions for an
22e0: 79 20 61 74 74 72 69 62 75 74 65 20 69 6e 20 60  y attribute in `
22f0: 60 41 74 74 72 2e 74 64 60 60 20 74 68 61 74 20  `Attr.td`` that 
2300: 68 61 73 20 6e 6f 74 20 73 65 74 20 60 60 41 53  has not set ``AS
2310: 54 4e 6f 64 65 20 3d 20 30 60 60 2e 0a 54 68 69  TNode = 0``..Thi
2320: 73 20 66 69 6c 65 20 69 73 20 69 6e 63 6c 75 64  s file is includ
2330: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 60 60  ed as part of ``
2340: 41 74 74 72 49 6d 70 6c 2e 63 70 70 60 60 2e 0a  AttrImpl.cpp``..
2350: 0a 43 6c 61 6e 67 41 74 74 72 4c 69 73 74 0a 2d  .ClangAttrList.-
2360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a  ------------..**
2370: 50 75 72 70 6f 73 65 2a 2a 3a 20 43 72 65 61 74  Purpose**: Creat
2380: 65 73 20 41 74 74 72 4c 69 73 74 2e 69 6e 63 2c  es AttrList.inc,
2390: 20 77 68 69 63 68 20 69 73 20 75 73 65 64 20 77   which is used w
23a0: 68 65 6e 20 61 20 6c 69 73 74 20 6f 66 20 73 65  hen a list of se
23b0: 6d 61 6e 74 69 63 0a 61 74 74 72 69 62 75 74 65  mantic.attribute
23c0: 20 69 64 65 6e 74 69 66 69 65 72 73 20 69 73 20   identifiers is 
23d0: 72 65 71 75 69 72 65 64 2e 20 46 6f 72 20 69 6e  required. For in
23e0: 73 74 61 6e 63 65 2c 20 60 60 41 74 74 72 4b 69  stance, ``AttrKi
23f0: 6e 64 73 2e 68 60 60 20 69 6e 63 6c 75 64 65 73  nds.h`` includes
2400: 20 74 68 69 73 0a 66 69 6c 65 20 74 6f 20 67 65   this.file to ge
2410: 6e 65 72 61 74 65 20 74 68 65 20 6c 69 73 74 20  nerate the list 
2420: 6f 66 20 60 60 61 74 74 72 3a 3a 4b 69 6e 64 60  of ``attr::Kind`
2430: 60 20 65 6e 75 6d 65 72 61 74 69 6f 6e 20 76 61  ` enumeration va
2440: 6c 75 65 73 2e 20 54 68 69 73 20 6c 69 73 74 20  lues. This list 
2450: 69 73 0a 73 65 70 61 72 61 74 65 64 20 6f 75 74  is.separated out
2460: 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20 63   into multiple c
2470: 61 74 65 67 6f 72 69 65 73 3a 20 61 74 74 72 69  ategories: attri
2480: 62 75 74 65 73 2c 20 69 6e 68 65 72 69 74 61 62  butes, inheritab
2490: 6c 65 20 61 74 74 72 69 62 75 74 65 73 2c 20 61  le attributes, a
24a0: 6e 64 0a 69 6e 68 65 72 69 74 61 62 6c 65 20 70  nd.inheritable p
24b0: 61 72 61 6d 65 74 65 72 20 61 74 74 72 69 62 75  arameter attribu
24c0: 74 65 73 2e 20 54 68 69 73 20 63 61 74 65 67 6f  tes. This catego
24d0: 72 69 7a 61 74 69 6f 6e 20 68 61 70 70 65 6e 73  rization happens
24e0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62   automatically.b
24f0: 61 73 65 64 20 6f 6e 20 69 6e 66 6f 72 6d 61 74  ased on informat
2500: 69 6f 6e 20 69 6e 20 60 60 41 74 74 72 2e 74 64  ion in ``Attr.td
2510: 60 60 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  `` and is used t
2520: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
2530: 60 60 63 6c 61 73 73 6f 66 60 60 0a 66 75 6e 63  ``classof``.func
2540: 74 69 6f 6e 61 6c 69 74 79 20 72 65 71 75 69 72  tionality requir
2550: 65 64 20 66 6f 72 20 60 60 64 79 6e 5f 63 61 73  ed for ``dyn_cas
2560: 74 60 60 20 61 6e 64 20 73 69 6d 69 6c 61 72 20  t`` and similar 
2570: 41 50 49 73 2e 0a 0a 43 6c 61 6e 67 41 74 74 72  APIs...ClangAttr
2580: 50 43 48 52 65 61 64 0a 2d 2d 2d 2d 2d 2d 2d 2d  PCHRead.--------
2590: 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70  --------..**Purp
25a0: 6f 73 65 2a 2a 3a 20 43 72 65 61 74 65 73 20 41  ose**: Creates A
25b0: 74 74 72 50 43 48 52 65 61 64 2e 69 6e 63 2c 20  ttrPCHRead.inc, 
25c0: 77 68 69 63 68 20 69 73 20 75 73 65 64 20 74 6f  which is used to
25d0: 20 64 65 73 65 72 69 61 6c 69 7a 65 20 61 74 74   deserialize att
25e0: 72 69 62 75 74 65 73 0a 69 6e 20 74 68 65 20 60  ributes.in the `
25f0: 60 41 53 54 52 65 61 64 65 72 3a 3a 52 65 61 64  `ASTReader::Read
2600: 41 74 74 72 69 62 75 74 65 73 60 60 20 66 75 6e  Attributes`` fun
2610: 63 74 69 6f 6e 2e 0a 0a 43 6c 61 6e 67 41 74 74  ction...ClangAtt
2620: 72 50 43 48 57 72 69 74 65 0a 2d 2d 2d 2d 2d 2d  rPCHWrite.------
2630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50  -----------..**P
2640: 75 72 70 6f 73 65 2a 2a 3a 20 43 72 65 61 74 65  urpose**: Create
2650: 73 20 41 74 74 72 50 43 48 57 72 69 74 65 2e 69  s AttrPCHWrite.i
2660: 6e 63 2c 20 77 68 69 63 68 20 69 73 20 75 73 65  nc, which is use
2670: 64 20 74 6f 20 73 65 72 69 61 6c 69 7a 65 20 61  d to serialize a
2680: 74 74 72 69 62 75 74 65 73 20 69 6e 0a 74 68 65  ttributes in.the
2690: 20 60 60 41 53 54 57 72 69 74 65 72 3a 3a 57 72   ``ASTWriter::Wr
26a0: 69 74 65 41 74 74 72 69 62 75 74 65 73 60 60 20  iteAttributes`` 
26b0: 66 75 6e 63 74 69 6f 6e 2e 0a 0a 43 6c 61 6e 67  function...Clang
26c0: 41 74 74 72 53 70 65 6c 6c 69 6e 67 73 0a 2d 2d  AttrSpellings.--
26d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26e0: 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a  ---..**Purpose**
26f0: 3a 20 43 72 65 61 74 65 73 20 41 74 74 72 53 70  : Creates AttrSp
2700: 65 6c 6c 69 6e 67 73 2e 69 6e 63 2c 20 77 68 69  ellings.inc, whi
2710: 63 68 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  ch is used to im
2720: 70 6c 65 6d 65 6e 74 20 74 68 65 0a 60 60 5f 5f  plement the.``__
2730: 68 61 73 5f 61 74 74 72 69 62 75 74 65 60 60 20  has_attribute`` 
2740: 66 65 61 74 75 72 65 20 74 65 73 74 20 6d 61 63  feature test mac
2750: 72 6f 2e 0a 0a 43 6c 61 6e 67 41 74 74 72 53 70  ro...ClangAttrSp
2760: 65 6c 6c 69 6e 67 4c 69 73 74 49 6e 64 65 78 0a  ellingListIndex.
2770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75  ----------..**Pu
2790: 72 70 6f 73 65 2a 2a 3a 20 43 72 65 61 74 65 73  rpose**: Creates
27a0: 20 41 74 74 72 53 70 65 6c 6c 69 6e 67 4c 69 73   AttrSpellingLis
27b0: 74 49 6e 64 65 78 2e 69 6e 63 2c 20 77 68 69 63  tIndex.inc, whic
27c0: 68 20 69 73 20 75 73 65 64 20 74 6f 20 6d 61 70  h is used to map
27d0: 20 70 61 72 73 65 64 0a 61 74 74 72 69 62 75 74   parsed.attribut
27e0: 65 20 73 70 65 6c 6c 69 6e 67 73 20 28 69 6e 63  e spellings (inc
27f0: 6c 75 64 69 6e 67 20 77 68 69 63 68 20 73 79 6e  luding which syn
2800: 74 61 78 20 6f 72 20 73 63 6f 70 65 20 77 61 73  tax or scope was
2810: 20 75 73 65 64 29 20 74 6f 20 61 6e 20 61 74 74   used) to an att
2820: 72 69 62 75 74 65 0a 73 70 65 6c 6c 69 6e 67 20  ribute.spelling 
2830: 6c 69 73 74 20 69 6e 64 65 78 2e 20 54 68 65 73  list index. Thes
2840: 65 20 73 70 65 6c 6c 69 6e 67 20 6c 69 73 74 20  e spelling list 
2850: 69 6e 64 65 78 20 76 61 6c 75 65 73 20 61 72 65  index values are
2860: 20 69 6e 74 65 72 6e 61 6c 0a 69 6d 70 6c 65 6d   internal.implem
2870: 65 6e 74 61 74 69 6f 6e 20 64 65 74 61 69 6c 73  entation details
2880: 20 65 78 70 6f 73 65 64 20 76 69 61 0a 60 60 41   exposed via.``A
2890: 74 74 72 69 62 75 74 65 4c 69 73 74 3a 3a 67 65  ttributeList::ge
28a0: 74 41 74 74 72 69 62 75 74 65 53 70 65 6c 6c 69  tAttributeSpelli
28b0: 6e 67 4c 69 73 74 49 6e 64 65 78 60 60 2e 0a 0a  ngListIndex``...
28c0: 43 6c 61 6e 67 41 74 74 72 56 69 73 69 74 6f 72  ClangAttrVisitor
28d0: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
28e0: 2d 2d 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a  ----..**Purpose*
28f0: 2a 3a 20 43 72 65 61 74 65 73 20 41 74 74 72 56  *: Creates AttrV
2900: 69 73 69 74 6f 72 2e 69 6e 63 2c 20 77 68 69 63  isitor.inc, whic
2910: 68 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 69  h is used when i
2920: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 72 65 63  mplementing .rec
2930: 75 72 73 69 76 65 20 41 53 54 20 76 69 73 69 74  ursive AST visit
2940: 6f 72 73 2e 0a 0a 43 6c 61 6e 67 41 74 74 72 54  ors...ClangAttrT
2950: 65 6d 70 6c 61 74 65 49 6e 73 74 61 6e 74 69 61  emplateInstantia
2960: 74 65 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  te.-------------
2970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2980: 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 43 72  .**Purpose**: Cr
2990: 65 61 74 65 73 20 41 74 74 72 54 65 6d 70 6c 61  eates AttrTempla
29a0: 74 65 49 6e 73 74 61 6e 74 69 61 74 65 2e 69 6e  teInstantiate.in
29b0: 63 2c 20 77 68 69 63 68 20 69 6d 70 6c 65 6d 65  c, which impleme
29c0: 6e 74 73 20 74 68 65 0a 60 60 69 6e 73 74 61 6e  nts the.``instan
29d0: 74 69 61 74 65 54 65 6d 70 6c 61 74 65 41 74 74  tiateTemplateAtt
29e0: 72 69 62 75 74 65 60 60 20 66 75 6e 63 74 69 6f  ribute`` functio
29f0: 6e 2c 20 75 73 65 64 20 77 68 65 6e 20 69 6e 73  n, used when ins
2a00: 74 61 6e 74 69 61 74 69 6e 67 20 61 20 74 65 6d  tantiating a tem
2a10: 70 6c 61 74 65 0a 74 68 61 74 20 72 65 71 75 69  plate.that requi
2a20: 72 65 73 20 61 6e 20 61 74 74 72 69 62 75 74 65  res an attribute
2a30: 20 74 6f 20 62 65 20 63 6c 6f 6e 65 64 2e 0a 0a   to be cloned...
2a40: 43 6c 61 6e 67 41 74 74 72 50 61 72 73 65 64 41  ClangAttrParsedA
2a50: 74 74 72 4c 69 73 74 0a 2d 2d 2d 2d 2d 2d 2d 2d  ttrList.--------
2a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2a70: 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 43 72  .**Purpose**: Cr
2a80: 65 61 74 65 73 20 41 74 74 72 50 61 72 73 65 64  eates AttrParsed
2a90: 41 74 74 72 4c 69 73 74 2e 69 6e 63 2c 20 77 68  AttrList.inc, wh
2aa0: 69 63 68 20 69 73 20 75 73 65 64 20 74 6f 20 67  ich is used to g
2ab0: 65 6e 65 72 61 74 65 20 74 68 65 0a 60 60 41 74  enerate the.``At
2ac0: 74 72 69 62 75 74 65 4c 69 73 74 3a 3a 4b 69 6e  tributeList::Kin
2ad0: 64 60 60 20 70 61 72 73 65 64 20 61 74 74 72 69  d`` parsed attri
2ae0: 62 75 74 65 20 65 6e 75 6d 65 72 61 74 69 6f 6e  bute enumeration
2af0: 2e 0a 0a 43 6c 61 6e 67 41 74 74 72 50 61 72 73  ...ClangAttrPars
2b00: 65 64 41 74 74 72 49 6d 70 6c 0a 2d 2d 2d 2d 2d  edAttrImpl.-----
2b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b20: 2d 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a  --..**Purpose**:
2b30: 20 43 72 65 61 74 65 73 20 41 74 74 72 50 61 72   Creates AttrPar
2b40: 73 65 64 41 74 74 72 49 6d 70 6c 2e 69 6e 63 2c  sedAttrImpl.inc,
2b50: 20 77 68 69 63 68 20 69 73 20 75 73 65 64 20 62   which is used b
2b60: 79 0a 60 60 41 74 74 72 69 62 75 74 65 4c 69 73  y.``AttributeLis
2b70: 74 2e 63 70 70 60 60 20 74 6f 20 69 6d 70 6c 65  t.cpp`` to imple
2b80: 6d 65 6e 74 20 73 65 76 65 72 61 6c 20 66 75 6e  ment several fun
2b90: 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 60 60  ctions on the ``
2ba0: 41 74 74 72 69 62 75 74 65 4c 69 73 74 60 60 0a  AttributeList``.
2bb0: 63 6c 61 73 73 2e 20 54 68 69 73 20 66 75 6e 63  class. This func
2bc0: 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 69 6d 70  tionality is imp
2bd0: 6c 65 6d 65 6e 74 65 64 20 76 69 61 20 74 68 65  lemented via the
2be0: 20 60 60 41 74 74 72 49 6e 66 6f 4d 61 70 20 50   ``AttrInfoMap P
2bf0: 61 72 73 65 64 41 74 74 72 49 6e 66 6f 60 60 0a  arsedAttrInfo``.
2c00: 61 72 72 61 79 2c 20 77 68 69 63 68 20 63 6f 6e  array, which con
2c10: 74 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65 6e  tains one elemen
2c20: 74 20 70 65 72 20 70 61 72 73 65 64 20 61 74 74  t per parsed att
2c30: 72 69 62 75 74 65 20 6f 62 6a 65 63 74 2e 0a 0a  ribute object...
2c40: 43 6c 61 6e 67 41 74 74 72 50 61 72 73 65 64 41  ClangAttrParsedA
2c50: 74 74 72 4b 69 6e 64 73 0a 2d 2d 2d 2d 2d 2d 2d  ttrKinds.-------
2c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c70: 2d 0a 0a 2a 2a 50 75 72 70 6f 73 65 2a 2a 3a 20  -..**Purpose**: 
2c80: 43 72 65 61 74 65 73 20 41 74 74 72 50 61 72 73  Creates AttrPars
2c90: 65 64 41 74 74 72 4b 69 6e 64 73 2e 69 6e 63 2c  edAttrKinds.inc,
2ca0: 20 77 68 69 63 68 20 69 73 20 75 73 65 64 20 74   which is used t
2cb0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
2cc0: 60 60 41 74 74 72 69 62 75 74 65 4c 69 73 74 3a  ``AttributeList:
2cd0: 3a 67 65 74 4b 69 6e 64 60 60 20 66 75 6e 63 74  :getKind`` funct
2ce0: 69 6f 6e 2c 20 6d 61 70 70 69 6e 67 20 61 20 73  ion, mapping a s
2cf0: 74 72 69 6e 67 20 28 61 6e 64 20 73 79 6e 74 61  tring (and synta
2d00: 78 29 20 74 6f 20 61 20 70 61 72 73 65 64 0a 61  x) to a parsed.a
2d10: 74 74 72 69 62 75 74 65 20 60 60 41 74 74 72 69  ttribute ``Attri
2d20: 62 75 74 65 4c 69 73 74 3a 3a 4b 69 6e 64 60 60  buteList::Kind``
2d30: 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 0a 0a 43   enumeration...C
2d40: 6c 61 6e 67 41 74 74 72 44 75 6d 70 0a 2d 2d 2d  langAttrDump.---
2d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 50 75  ----------..**Pu
2d60: 72 70 6f 73 65 2a 2a 3a 20 43 72 65 61 74 65 73  rpose**: Creates
2d70: 20 41 74 74 72 44 75 6d 70 2e 69 6e 63 2c 20 77   AttrDump.inc, w
2d80: 68 69 63 68 20 64 75 6d 70 73 20 69 6e 66 6f 72  hich dumps infor
2d90: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 6e 20  mation about an 
2da0: 61 74 74 72 69 62 75 74 65 2e 0a 49 74 20 69 73  attribute..It is
2db0: 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
2dc0: 6e 74 20 60 60 41 53 54 44 75 6d 70 65 72 3a 3a  nt ``ASTDumper::
2dd0: 64 75 6d 70 41 74 74 72 60 60 2e 0a 0a 43 6c 61  dumpAttr``...Cla
2de0: 6e 67 44 69 61 67 73 44 65 66 73 0a 2d 2d 2d 2d  ngDiagsDefs.----
2df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 65 6e 65  ----------..Gene
2e00: 72 61 74 65 20 43 6c 61 6e 67 20 64 69 61 67 6e  rate Clang diagn
2e10: 6f 73 74 69 63 73 20 64 65 66 69 6e 69 74 69 6f  ostics definitio
2e20: 6e 73 2e 0a 0a 43 6c 61 6e 67 44 69 61 67 47 72  ns...ClangDiagGr
2e30: 6f 75 70 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  oups.-----------
2e40: 2d 2d 2d 2d 0a 0a 47 65 6e 65 72 61 74 65 20 43  ----..Generate C
2e50: 6c 61 6e 67 20 64 69 61 67 6e 6f 73 74 69 63 20  lang diagnostic 
2e60: 67 72 6f 75 70 73 2e 0a 0a 43 6c 61 6e 67 44 69  groups...ClangDi
2e70: 61 67 73 49 6e 64 65 78 4e 61 6d 65 0a 2d 2d 2d  agsIndexName.---
2e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e90: 0a 0a 47 65 6e 65 72 61 74 65 20 43 6c 61 6e 67  ..Generate Clang
2ea0: 20 64 69 61 67 6e 6f 73 74 69 63 20 6e 61 6d 65   diagnostic name
2eb0: 20 69 6e 64 65 78 2e 0a 0a 43 6c 61 6e 67 43 6f   index...ClangCo
2ec0: 6d 6d 65 6e 74 4e 6f 64 65 73 0a 2d 2d 2d 2d 2d  mmentNodes.-----
2ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 65  ------------..Ge
2ee0: 6e 65 72 61 74 65 20 43 6c 61 6e 67 20 41 53 54  nerate Clang AST
2ef0: 20 63 6f 6d 6d 65 6e 74 20 6e 6f 64 65 73 2e 0a   comment nodes..
2f00: 0a 43 6c 61 6e 67 44 65 63 6c 4e 6f 64 65 73 0a  .ClangDeclNodes.
2f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
2f20: 47 65 6e 65 72 61 74 65 20 43 6c 61 6e 67 20 41  Generate Clang A
2f30: 53 54 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6e  ST declaration n
2f40: 6f 64 65 73 2e 0a 0a 43 6c 61 6e 67 53 74 6d 74  odes...ClangStmt
2f50: 4e 6f 64 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  Nodes.----------
2f60: 2d 2d 2d 2d 0a 0a 47 65 6e 65 72 61 74 65 20 43  ----..Generate C
2f70: 6c 61 6e 67 20 41 53 54 20 73 74 61 74 65 6d 65  lang AST stateme
2f80: 6e 74 20 6e 6f 64 65 73 2e 0a 0a 43 6c 61 6e 67  nt nodes...Clang
2f90: 53 41 43 68 65 63 6b 65 72 73 0a 2d 2d 2d 2d 2d  SACheckers.-----
2fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 65 6e 65  ----------..Gene
2fb0: 72 61 74 65 20 43 6c 61 6e 67 20 53 74 61 74 69  rate Clang Stati
2fc0: 63 20 41 6e 61 6c 79 7a 65 72 20 63 68 65 63 6b  c Analyzer check
2fd0: 65 72 73 2e 0a 0a 43 6c 61 6e 67 43 6f 6d 6d 65  ers...ClangComme
2fe0: 6e 74 48 54 4d 4c 54 61 67 73 0a 2d 2d 2d 2d 2d  ntHTMLTags.-----
2ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
3000: 0a 47 65 6e 65 72 61 74 65 20 65 66 66 69 63 69  .Generate effici
3010: 65 6e 74 20 6d 61 74 63 68 65 72 73 20 66 6f 72  ent matchers for
3020: 20 48 54 4d 4c 20 74 61 67 20 6e 61 6d 65 73 20   HTML tag names 
3030: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 69 6e  that are used in
3040: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 63   documentation c
3050: 6f 6d 6d 65 6e 74 73 2e 0a 0a 43 6c 61 6e 67 43  omments...ClangC
3060: 6f 6d 6d 65 6e 74 48 54 4d 4c 54 61 67 73 50 72  ommentHTMLTagsPr
3070: 6f 70 65 72 74 69 65 73 0a 2d 2d 2d 2d 2d 2d 2d  operties.-------
3080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3090: 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 65 6e 65 72 61 74  -------..Generat
30a0: 65 20 65 66 66 69 63 69 65 6e 74 20 6d 61 74 63  e efficient matc
30b0: 68 65 72 73 20 66 6f 72 20 48 54 4d 4c 20 74 61  hers for HTML ta
30c0: 67 20 70 72 6f 70 65 72 74 69 65 73 2e 0a 0a 43  g properties...C
30d0: 6c 61 6e 67 43 6f 6d 6d 65 6e 74 48 54 4d 4c 4e  langCommentHTMLN
30e0: 61 6d 65 64 43 68 61 72 61 63 74 65 72 52 65 66  amedCharacterRef
30f0: 65 72 65 6e 63 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d  erences.--------
3100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3120: 0a 0a 47 65 6e 65 72 61 74 65 20 66 75 6e 63 74  ..Generate funct
3130: 69 6f 6e 20 74 6f 20 74 72 61 6e 73 6c 61 74 65  ion to translate
3140: 20 6e 61 6d 65 64 20 63 68 61 72 61 63 74 65 72   named character
3150: 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 55   references to U
3160: 54 46 2d 38 20 73 65 71 75 65 6e 63 65 73 2e 0a  TF-8 sequences..
3170: 0a 43 6c 61 6e 67 43 6f 6d 6d 65 6e 74 43 6f 6d  .ClangCommentCom
3180: 6d 61 6e 64 49 6e 66 6f 0a 2d 2d 2d 2d 2d 2d 2d  mandInfo.-------
3190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31a0: 0a 0a 47 65 6e 65 72 61 74 65 20 63 6f 6d 6d 61  ..Generate comma
31b0: 6e 64 20 70 72 6f 70 65 72 74 69 65 73 20 66 6f  nd properties fo
31c0: 72 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20  r commands that 
31d0: 61 72 65 20 75 73 65 64 20 69 6e 20 64 6f 63 75  are used in docu
31e0: 6d 65 6e 74 61 74 69 6f 6e 20 63 6f 6d 6d 65 6e  mentation commen
31f0: 74 73 2e 0a 0a 43 6c 61 6e 67 43 6f 6d 6d 65 6e  ts...ClangCommen
3200: 74 43 6f 6d 6d 61 6e 64 4c 69 73 74 0a 2d 2d 2d  tCommandList.---
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3220: 2d 2d 2d 2d 0a 0a 47 65 6e 65 72 61 74 65 20 6c  ----..Generate l
3230: 69 73 74 20 6f 66 20 63 6f 6d 6d 61 6e 64 73 20  ist of commands 
3240: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 69 6e  that are used in
3250: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 63   documentation c
3260: 6f 6d 6d 65 6e 74 73 2e 0a 0a 41 72 6d 4e 65 6f  omments...ArmNeo
3270: 6e 0a 2d 2d 2d 2d 2d 2d 2d 0a 0a 47 65 6e 65 72  n.-------..Gener
3280: 61 74 65 20 61 72 6d 5f 6e 65 6f 6e 2e 68 20 66  ate arm_neon.h f
3290: 6f 72 20 63 6c 61 6e 67 2e 0a 0a 41 72 6d 4e 65  or clang...ArmNe
32a0: 6f 6e 53 65 6d 61 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  onSema.---------
32b0: 2d 2d 0a 0a 47 65 6e 65 72 61 74 65 20 41 52 4d  --..Generate ARM
32c0: 20 4e 45 4f 4e 20 73 65 6d 61 20 73 75 70 70 6f   NEON sema suppo
32d0: 72 74 20 66 6f 72 20 63 6c 61 6e 67 2e 0a 0a 41  rt for clang...A
32e0: 72 6d 4e 65 6f 6e 54 65 73 74 0a 2d 2d 2d 2d 2d  rmNeonTest.-----
32f0: 2d 2d 2d 2d 2d 2d 0a 0a 47 65 6e 65 72 61 74 65  ------..Generate
3300: 20 41 52 4d 20 4e 45 4f 4e 20 74 65 73 74 73 20   ARM NEON tests 
3310: 66 6f 72 20 63 6c 61 6e 67 2e 0a 0a 41 74 74 72  for clang...Attr
3320: 44 6f 63 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a  Docs.--------..*
3330: 2a 50 75 72 70 6f 73 65 2a 2a 3a 20 43 72 65 61  *Purpose**: Crea
3340: 74 65 73 20 60 60 41 74 74 72 69 62 75 74 65 52  tes ``AttributeR
3350: 65 66 65 72 65 6e 63 65 2e 72 73 74 60 60 20 66  eference.rst`` f
3360: 72 6f 6d 20 60 60 41 74 74 72 44 6f 63 73 2e 74  rom ``AttrDocs.t
3370: 64 60 60 2c 20 61 6e 64 20 69 73 0a 75 73 65 64  d``, and is.used
3380: 20 66 6f 72 20 64 6f 63 75 6d 65 6e 74 69 6e 67   for documenting
3390: 20 75 73 65 72 2d 66 61 63 69 6e 67 20 61 74 74   user-facing att
33a0: 72 69 62 75 74 65 73 2e 0a 0a 48 6f 77 20 74 6f  ributes...How to
33b0: 20 77 72 69 74 65 20 61 20 62 61 63 6b 2d 65 6e   write a back-en
33c0: 64 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  d.==============
33d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 4f 44 4f 2e  =========..TODO.
33e0: 0a 0a 55 6e 74 69 6c 20 77 65 20 67 65 74 20 61  ..Until we get a
33f0: 20 73 74 65 70 2d 62 79 2d 73 74 65 70 20 48 6f   step-by-step Ho
3400: 77 54 6f 20 66 6f 72 20 77 72 69 74 69 6e 67 20  wTo for writing 
3410: 54 61 62 6c 65 47 65 6e 20 62 61 63 6b 65 6e 64  TableGen backend
3420: 73 2c 20 79 6f 75 20 63 61 6e 20 61 74 0a 6c 65  s, you can at.le
3430: 61 73 74 20 67 72 61 62 20 74 68 65 20 62 6f 69  ast grab the boi
3440: 6c 65 72 70 6c 61 74 65 20 28 62 75 69 6c 64 20  lerplate (build 
3450: 73 79 73 74 65 6d 2c 20 6e 65 77 20 66 69 6c 65  system, new file
3460: 73 2c 20 65 74 63 2e 29 20 66 72 6f 6d 20 43 6c  s, etc.) from Cl
3470: 61 6e 67 27 73 0a 72 31 37 33 39 33 31 2e 0a 0a  ang's.r173931...
3480: 54 4f 44 4f 3a 20 48 6f 77 20 74 68 65 79 20 77  TODO: How they w
3490: 6f 72 6b 2c 20 68 6f 77 20 74 6f 20 77 72 69 74  ork, how to writ
34a0: 65 20 6f 6e 65 2e 20 20 54 68 69 73 20 73 65 63  e one.  This sec
34b0: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20  tion should not 
34c0: 63 6f 6e 74 61 69 6e 20 64 65 74 61 69 6c 73 0a  contain details.
34d0: 61 62 6f 75 74 20 61 6e 79 20 70 61 72 74 69 63  about any partic
34e0: 75 6c 61 72 20 62 61 63 6b 65 6e 64 2c 20 65 78  ular backend, ex
34f0: 63 65 70 74 20 6d 61 79 62 65 20 60 60 2d 70 72  cept maybe ``-pr
3500: 69 6e 74 2d 65 6e 75 6d 73 60 60 20 61 73 20 61  int-enums`` as a
3510: 6e 20 65 78 61 6d 70 6c 65 2e 20 20 54 68 69 73  n example.  This
3520: 0a 73 68 6f 75 6c 64 20 68 69 67 68 6c 69 67 68  .should highligh
3530: 74 20 74 68 65 20 41 50 49 73 20 69 6e 20 60 60  t the APIs in ``
3540: 54 61 62 6c 65 47 65 6e 2f 52 65 63 6f 72 64 2e  TableGen/Record.
3550: 68 60 60 2e 0a 0a                                h``...