blob: 0380bcced5fcf18cda4fdf94e29113d8ff1eac07 [file] [log] [blame]
Alex Lorenz3d311772015-08-06 22:55:19 +00001========================================
2Machine IR (MIR) Format Reference Manual
3========================================
4
5.. contents::
6 :local:
7
8.. warning::
9 This is a work in progress.
10
11Introduction
12============
13
14This document is a reference manual for the Machine IR (MIR) serialization
15format. MIR is a human readable serialization format that is used to represent
16LLVM's :ref:`machine specific intermediate representation
17<machine code representation>`.
18
19The MIR serialization format is designed to be used for testing the code
20generation passes in LLVM.
21
22Overview
23========
24
25The MIR serialization format uses a YAML container. YAML is a standard
26data serialization language, and the full YAML language spec can be read at
27`yaml.org
28<http://www.yaml.org/spec/1.2/spec.html#Introduction>`_.
29
30A MIR file is split up into a series of `YAML documents`_. The first document
31can contain an optional embedded LLVM IR module, and the rest of the documents
32contain the serialized machine functions.
33
34.. _YAML documents: http://www.yaml.org/spec/1.2/spec.html#id2800132
35
Alex Lorenzea788c42015-08-21 22:58:33 +000036MIR Testing Guide
37=================
38
39You can use the MIR format for testing in two different ways:
40
41- You can write MIR tests that invoke a single code generation pass using the
Matthias Braune6185b72017-04-13 22:14:45 +000042 ``-run-pass`` option in llc.
Alex Lorenzea788c42015-08-21 22:58:33 +000043
Matthias Braune6185b72017-04-13 22:14:45 +000044- You can use llc's ``-stop-after`` option with existing or new LLVM assembly
Alex Lorenzea788c42015-08-21 22:58:33 +000045 tests and check the MIR output of a specific code generation pass.
46
47Testing Individual Code Generation Passes
48-----------------------------------------
49
Matthias Braune6185b72017-04-13 22:14:45 +000050The ``-run-pass`` option in llc allows you to create MIR tests that invoke just
51a single code generation pass. When this option is used, llc will parse an
52input MIR file, run the specified code generation pass(es), and output the
53resulting MIR code.
Alex Lorenzea788c42015-08-21 22:58:33 +000054
Matthias Braune6185b72017-04-13 22:14:45 +000055You can generate an input MIR file for the test by using the ``-stop-after`` or
56``-stop-before`` option in llc. For example, if you would like to write a test
57for the post register allocation pseudo instruction expansion pass, you can
58specify the machine copy propagation pass in the ``-stop-after`` option, as it
59runs just before the pass that we are trying to test:
Alex Lorenzea788c42015-08-21 22:58:33 +000060
Matthias Braune6185b72017-04-13 22:14:45 +000061 ``llc -stop-after=machine-cp bug-trigger.ll > test.mir``
Alex Lorenzea788c42015-08-21 22:58:33 +000062
Matt Arsenault43153022018-12-04 17:45:12 +000063If the same pass is run multiple times, a run index can be included
64after the name with a comma.
65
66 ``llc -stop-after=dead-mi-elimination,1 bug-trigger.ll > test.mir``
67
Alex Lorenzea788c42015-08-21 22:58:33 +000068After generating the input MIR file, you'll have to add a run line that uses
69the ``-run-pass`` option to it. In order to test the post register allocation
70pseudo instruction expansion pass on X86-64, a run line like the one shown
71below can be used:
72
Matthias Braune6185b72017-04-13 22:14:45 +000073 ``# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=postrapseudos | FileCheck %s``
Alex Lorenzea788c42015-08-21 22:58:33 +000074
75The MIR files are target dependent, so they have to be placed in the target
Matthias Braune6185b72017-04-13 22:14:45 +000076specific test directories (``lib/CodeGen/TARGETNAME``). They also need to
77specify a target triple or a target architecture either in the run line or in
78the embedded LLVM IR module.
Alex Lorenzea788c42015-08-21 22:58:33 +000079
Matthias Braun836c3832017-04-13 23:45:14 +000080Simplifying MIR files
81^^^^^^^^^^^^^^^^^^^^^
82
83The MIR code coming out of ``-stop-after``/``-stop-before`` is very verbose;
84Tests are more accessible and future proof when simplified:
85
Matthias Braun89401142017-05-05 21:09:30 +000086- Use the ``-simplify-mir`` option with llc.
87
Matthias Braun836c3832017-04-13 23:45:14 +000088- Machine function attributes often have default values or the test works just
89 as well with default values. Typical candidates for this are: `alignment:`,
90 `exposesReturnsTwice`, `legalized`, `regBankSelected`, `selected`.
91 The whole `frameInfo` section is often unnecessary if there is no special
92 frame usage in the function. `tracksRegLiveness` on the other hand is often
93 necessary for some passes that care about block livein lists.
94
95- The (global) `liveins:` list is typically only interesting for early
96 instruction selection passes and can be removed when testing later passes.
97 The per-block `liveins:` on the other hand are necessary if
98 `tracksRegLiveness` is true.
99
100- Branch probability data in block `successors:` lists can be dropped if the
101 test doesn't depend on it. Example:
102 `successors: %bb.1(0x40000000), %bb.2(0x40000000)` can be replaced with
103 `successors: %bb.1, %bb.2`.
104
105- MIR code contains a whole IR module. This is necessary because there are
106 no equivalents in MIR for global variables, references to external functions,
107 function attributes, metadata, debug info. Instead some MIR data references
108 the IR constructs. You can often remove them if the test doesn't depend on
109 them.
110
111- Alias Analysis is performed on IR values. These are referenced by memory
112 operands in MIR. Example: `:: (load 8 from %ir.foobar, !alias.scope !9)`.
113 If the test doesn't depend on (good) alias analysis the references can be
114 dropped: `:: (load 8)`
115
116- MIR blocks can reference IR blocks for debug printing, profile information
117 or debug locations. Example: `bb.42.myblock` in MIR references the IR block
118 `myblock`. It is usually possible to drop the `.myblock` reference and simply
119 use `bb.42`.
120
121- If there are no memory operands or blocks referencing the IR then the
122 IR function can be replaced by a parameterless dummy function like
123 `define @func() { ret void }`.
124
125- It is possible to drop the whole IR section of the MIR file if it only
126 contains dummy functions (see above). The .mir loader will create the
127 IR functions automatically in this case.
128
Francis Visoiu Mistrih3c993712017-12-14 10:03:23 +0000129.. _limitations:
130
Alex Lorenzea788c42015-08-21 22:58:33 +0000131Limitations
132-----------
133
134Currently the MIR format has several limitations in terms of which state it
135can serialize:
136
137- The target-specific state in the target-specific ``MachineFunctionInfo``
138 subclasses isn't serialized at the moment.
139
140- The target-specific ``MachineConstantPoolValue`` subclasses (in the ARM and
141 SystemZ backends) aren't serialized at the moment.
142
Chandler Carruth75ca6be2018-08-16 23:11:05 +0000143- The ``MCSymbol`` machine operands don't support temporary or local symbols.
Alex Lorenzea788c42015-08-21 22:58:33 +0000144
145- A lot of the state in ``MachineModuleInfo`` isn't serialized - only the CFI
146 instructions and the variable debug information from MMI is serialized right
147 now.
148
149These limitations impose restrictions on what you can test with the MIR format.
150For now, tests that would like to test some behaviour that depends on the state
Chandler Carruth75ca6be2018-08-16 23:11:05 +0000151of temporary or local ``MCSymbol`` operands or the exception handling state in
152MMI, can't use the MIR format. As well as that, tests that test some behaviour
153that depends on the state of the target specific ``MachineFunctionInfo`` or
Alex Lorenzea788c42015-08-21 22:58:33 +0000154``MachineConstantPoolValue`` subclasses can't use the MIR format at the moment.
155
Alex Lorenz3d311772015-08-06 22:55:19 +0000156High Level Structure
157====================
158
Alex Lorenzd4990eb2015-09-08 11:38:16 +0000159.. _embedded-module:
160
Alex Lorenz3d311772015-08-06 22:55:19 +0000161Embedded Module
162---------------
163
164When the first YAML document contains a `YAML block literal string`_, the MIR
165parser will treat this string as an LLVM assembly language string that
166represents an embedded LLVM IR module.
167Here is an example of a YAML document that contains an LLVM module:
168
169.. code-block:: llvm
170
Alex Lorenz3d311772015-08-06 22:55:19 +0000171 define i32 @inc(i32* %x) {
172 entry:
173 %0 = load i32, i32* %x
174 %1 = add i32 %0, 1
175 store i32 %1, i32* %x
176 ret i32 %1
177 }
Alex Lorenz3d311772015-08-06 22:55:19 +0000178
179.. _YAML block literal string: http://www.yaml.org/spec/1.2/spec.html#id2795688
180
181Machine Functions
182-----------------
183
184The remaining YAML documents contain the machine functions. This is an example
185of such YAML document:
186
Renato Golin124f2592016-07-20 12:16:38 +0000187.. code-block:: text
Alex Lorenz3d311772015-08-06 22:55:19 +0000188
189 ---
190 name: inc
191 tracksRegLiveness: true
192 liveins:
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000193 - { reg: '$rdi' }
Djordje Todorovica7cde102019-06-27 07:48:06 +0000194 callSites:
195 - { bb: 0, offset: 3, fwdArgRegs:
196 - { arg: 0, reg: '$edi' } }
Alex Lorenz98461672015-08-14 00:36:10 +0000197 body: |
198 bb.0.entry:
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000199 liveins: $rdi
Alex Lorenz98461672015-08-14 00:36:10 +0000200
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000201 $eax = MOV32rm $rdi, 1, _, 0, _
202 $eax = INC32r killed $eax, implicit-def dead $eflags
203 MOV32mr killed $rdi, 1, _, 0, _, $eax
Djordje Todorovica7cde102019-06-27 07:48:06 +0000204 CALL64pcrel32 @foo <regmask...>
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000205 RETQ $eax
Alex Lorenz3d311772015-08-06 22:55:19 +0000206 ...
207
208The document above consists of attributes that represent the various
209properties and data structures in a machine function.
210
211The attribute ``name`` is required, and its value should be identical to the
212name of a function that this machine function is based on.
213
Alex Lorenz98461672015-08-14 00:36:10 +0000214The attribute ``body`` is a `YAML block literal string`_. Its value represents
215the function's machine basic blocks and their machine instructions.
Alex Lorenz3d311772015-08-06 22:55:19 +0000216
Djordje Todorovica7cde102019-06-27 07:48:06 +0000217The attribute ``callSites`` is a representation of call site information which
218keeps track of call instructions and registers used to transfer call arguments.
219
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000220Machine Instructions Format Reference
221=====================================
222
223The machine basic blocks and their instructions are represented using a custom,
224human readable serialization language. This language is used in the
225`YAML block literal string`_ that corresponds to the machine function's body.
226
227A source string that uses this language contains a list of machine basic
228blocks, which are described in the section below.
229
230Machine Basic Blocks
231--------------------
232
233A machine basic block is defined in a single block definition source construct
234that contains the block's ID.
235The example below defines two blocks that have an ID of zero and one:
236
Renato Golin124f2592016-07-20 12:16:38 +0000237.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000238
239 bb.0:
240 <instructions>
241 bb.1:
242 <instructions>
243
244A machine basic block can also have a name. It should be specified after the ID
245in the block's definition:
246
Renato Golin124f2592016-07-20 12:16:38 +0000247.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000248
249 bb.0.entry: ; This block's name is "entry"
250 <instructions>
251
252The block's name should be identical to the name of the IR block that this
253machine block is based on.
254
Francis Visoiu Mistrihb41dbbe2017-12-13 10:30:59 +0000255.. _block-references:
256
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000257Block References
258^^^^^^^^^^^^^^^^
259
260The machine basic blocks are identified by their ID numbers. Individual
261blocks are referenced using the following syntax:
262
Renato Golin124f2592016-07-20 12:16:38 +0000263.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000264
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000265 %bb.<id>
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000266
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000267Example:
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000268
269.. code-block:: llvm
270
271 %bb.0
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000272
273The following syntax is also supported, but the former syntax is preferred for
274block references:
275
276.. code-block:: text
277
278 %bb.<id>[.<name>]
279
280Example:
281
282.. code-block:: llvm
283
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000284 %bb.1.then
285
286Successors
287^^^^^^^^^^
288
289The machine basic block's successors have to be specified before any of the
290instructions:
291
Renato Golin124f2592016-07-20 12:16:38 +0000292.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000293
294 bb.0.entry:
295 successors: %bb.1.then, %bb.2.else
296 <instructions>
297 bb.1.then:
298 <instructions>
299 bb.2.else:
300 <instructions>
301
302The branch weights can be specified in brackets after the successor blocks.
303The example below defines a block that has two successors with branch weights
304of 32 and 16:
305
Renato Golin124f2592016-07-20 12:16:38 +0000306.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000307
308 bb.0.entry:
309 successors: %bb.1.then(32), %bb.2.else(16)
310
Alex Lorenzb981d372015-08-21 21:17:01 +0000311.. _bb-liveins:
312
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000313Live In Registers
314^^^^^^^^^^^^^^^^^
315
316The machine basic block's live in registers have to be specified before any of
317the instructions:
318
Renato Golin124f2592016-07-20 12:16:38 +0000319.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000320
321 bb.0.entry:
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000322 liveins: $edi, $esi
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000323
324The list of live in registers and successors can be empty. The language also
325allows multiple live in register and successor lists - they are combined into
326one list by the parser.
327
328Miscellaneous Attributes
329^^^^^^^^^^^^^^^^^^^^^^^^
330
331The attributes ``IsAddressTaken``, ``IsLandingPad`` and ``Alignment`` can be
332specified in brackets after the block's definition:
333
Renato Golin124f2592016-07-20 12:16:38 +0000334.. code-block:: text
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000335
336 bb.0.entry (address-taken):
337 <instructions>
338 bb.2.else (align 4):
339 <instructions>
340 bb.3(landing-pad, align 4):
341 <instructions>
342
343.. TODO: Describe the way the reference to an unnamed LLVM IR block can be
344 preserved.
345
Guillaume Chateletaff45e42019-09-05 10:00:22 +0000346``Alignment`` is specified in bytes, and must be a power of two.
347
Daniel Sandersad0dfb02019-11-05 15:10:00 -0800348.. _mir-instructions:
349
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000350Machine Instructions
351--------------------
352
Alex Lorenzb981d372015-08-21 21:17:01 +0000353A machine instruction is composed of a name,
354:ref:`machine operands <machine-operands>`,
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000355:ref:`instruction flags <instruction-flags>`, and machine memory operands.
356
357The instruction's name is usually specified before the operands. The example
358below shows an instance of the X86 ``RETQ`` instruction with a single machine
359operand:
360
Renato Golin124f2592016-07-20 12:16:38 +0000361.. code-block:: text
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000362
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000363 RETQ $eax
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000364
365However, if the machine instruction has one or more explicitly defined register
366operands, the instruction's name has to be specified after them. The example
367below shows an instance of the AArch64 ``LDPXpost`` instruction with three
368defined register operands:
369
Renato Golin124f2592016-07-20 12:16:38 +0000370.. code-block:: text
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000371
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000372 $sp, $fp, $lr = LDPXpost $sp, 2
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000373
374The instruction names are serialized using the exact definitions from the
375target's ``*InstrInfo.td`` files, and they are case sensitive. This means that
376similar instruction names like ``TSTri`` and ``tSTRi`` represent different
377machine instructions.
378
379.. _instruction-flags:
380
381Instruction Flags
382^^^^^^^^^^^^^^^^^
383
Francis Visoiu Mistrihdbf2c482018-01-09 11:33:22 +0000384The flag ``frame-setup`` or ``frame-destroy`` can be specified before the
385instruction's name:
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000386
Renato Golin124f2592016-07-20 12:16:38 +0000387.. code-block:: text
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000388
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000389 $fp = frame-setup ADDXri $sp, 0, 0
Alex Lorenz8eadc3f2015-08-21 17:26:38 +0000390
Francis Visoiu Mistrihdbf2c482018-01-09 11:33:22 +0000391.. code-block:: text
392
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000393 $x21, $x20 = frame-destroy LDPXi $sp
Francis Visoiu Mistrihdbf2c482018-01-09 11:33:22 +0000394
Alex Lorenzb981d372015-08-21 21:17:01 +0000395.. _registers:
396
Francis Visoiu Mistrih58367902018-01-10 17:53:16 +0000397Bundled Instructions
398^^^^^^^^^^^^^^^^^^^^
399
400The syntax for bundled instructions is the following:
401
402.. code-block:: text
403
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000404 BUNDLE implicit-def $r0, implicit-def $r1, implicit $r2 {
405 $r0 = SOME_OP $r2
406 $r1 = ANOTHER_OP internal $r0
Francis Visoiu Mistrih58367902018-01-10 17:53:16 +0000407 }
408
409The first instruction is often a bundle header. The instructions between ``{``
410and ``}`` are bundled with the first instruction.
411
Daniel Sandersad0dfb02019-11-05 15:10:00 -0800412.. _mir-registers:
413
Alex Lorenzb981d372015-08-21 21:17:01 +0000414Registers
415---------
416
417Registers are one of the key primitives in the machine instructions
Hiroshi Inouec36a1f12018-06-15 05:10:09 +0000418serialization language. They are primarily used in the
Alex Lorenzb981d372015-08-21 21:17:01 +0000419:ref:`register machine operands <register-operands>`,
420but they can also be used in a number of other places, like the
421:ref:`basic block's live in list <bb-liveins>`.
422
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000423The physical registers are identified by their name and by the '$' prefix sigil.
424They use the following syntax:
Alex Lorenzb981d372015-08-21 21:17:01 +0000425
Renato Golin124f2592016-07-20 12:16:38 +0000426.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000427
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000428 $<name>
Alex Lorenzb981d372015-08-21 21:17:01 +0000429
430The example below shows three X86 physical registers:
431
Renato Golin124f2592016-07-20 12:16:38 +0000432.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000433
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000434 $eax
435 $r15
436 $eflags
Alex Lorenzb981d372015-08-21 21:17:01 +0000437
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000438The virtual registers are identified by their ID number and by the '%' sigil.
439They use the following syntax:
Alex Lorenzb981d372015-08-21 21:17:01 +0000440
Renato Golin124f2592016-07-20 12:16:38 +0000441.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000442
443 %<id>
444
445Example:
446
Renato Golin124f2592016-07-20 12:16:38 +0000447.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000448
449 %0
450
451The null registers are represented using an underscore ('``_``'). They can also be
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000452represented using a '``$noreg``' named register, although the former syntax
Alex Lorenzb981d372015-08-21 21:17:01 +0000453is preferred.
454
455.. _machine-operands:
456
457Machine Operands
458----------------
459
Chandler Carruth75ca6be2018-08-16 23:11:05 +0000460There are seventeen different kinds of machine operands, and all of them can be
461serialized.
Alex Lorenzb981d372015-08-21 21:17:01 +0000462
463Immediate Operands
464^^^^^^^^^^^^^^^^^^
465
466The immediate machine operands are untyped, 64-bit signed integers. The
467example below shows an instance of the X86 ``MOV32ri`` instruction that has an
468immediate machine operand ``-42``:
469
Renato Golin124f2592016-07-20 12:16:38 +0000470.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000471
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000472 $eax = MOV32ri -42
Alex Lorenzb981d372015-08-21 21:17:01 +0000473
Francis Visoiu Mistrih440f69c2017-12-08 22:53:21 +0000474An immediate operand is also used to represent a subregister index when the
475machine instruction has one of the following opcodes:
476
477- ``EXTRACT_SUBREG``
478
479- ``INSERT_SUBREG``
480
481- ``REG_SEQUENCE``
482
483- ``SUBREG_TO_REG``
484
485In case this is true, the Machine Operand is printed according to the target.
486
487For example:
488
489In AArch64RegisterInfo.td:
490
491.. code-block:: text
492
493 def sub_32 : SubRegIndex<32>;
494
495If the third operand is an immediate with the value ``15`` (target-dependent
496value), based on the instruction's opcode and the operand's index the operand
497will be printed as ``%subreg.sub_32``:
498
499.. code-block:: text
500
501 %1:gpr64 = SUBREG_TO_REG 0, %0, %subreg.sub_32
502
Francis Visoiu Mistrih6c4ca712017-12-08 11:40:06 +0000503For integers > 64bit, we use a special machine operand, ``MO_CImmediate``,
504which stores the immediate in a ``ConstantInt`` using an ``APInt`` (LLVM's
505arbitrary precision integers).
506
507.. TODO: Describe the FPIMM immediate operands.
Alex Lorenzb981d372015-08-21 21:17:01 +0000508
509.. _register-operands:
510
511Register Operands
512^^^^^^^^^^^^^^^^^
513
514The :ref:`register <registers>` primitive is used to represent the register
515machine operands. The register operands can also have optional
516:ref:`register flags <register-flags>`,
Alex Lorenz37e02622015-09-08 11:39:47 +0000517:ref:`a subregister index <subregister-indices>`,
518and a reference to the tied register operand.
Alex Lorenzb981d372015-08-21 21:17:01 +0000519The full syntax of a register operand is shown below:
520
Renato Golin124f2592016-07-20 12:16:38 +0000521.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000522
523 [<flags>] <register> [ :<subregister-idx-name> ] [ (tied-def <tied-op>) ]
524
525This example shows an instance of the X86 ``XOR32rr`` instruction that has
5265 register operands with different register flags:
527
Renato Golin124f2592016-07-20 12:16:38 +0000528.. code-block:: text
Alex Lorenzb981d372015-08-21 21:17:01 +0000529
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000530 dead $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $al
Alex Lorenzb981d372015-08-21 21:17:01 +0000531
532.. _register-flags:
533
534Register Flags
535~~~~~~~~~~~~~~
536
537The table below shows all of the possible register flags along with the
538corresponding internal ``llvm::RegState`` representation:
539
540.. list-table::
541 :header-rows: 1
542
543 * - Flag
544 - Internal Value
545
546 * - ``implicit``
547 - ``RegState::Implicit``
548
549 * - ``implicit-def``
550 - ``RegState::ImplicitDefine``
551
552 * - ``def``
553 - ``RegState::Define``
554
555 * - ``dead``
556 - ``RegState::Dead``
557
558 * - ``killed``
559 - ``RegState::Kill``
560
561 * - ``undef``
562 - ``RegState::Undef``
563
564 * - ``internal``
565 - ``RegState::InternalRead``
566
567 * - ``early-clobber``
568 - ``RegState::EarlyClobber``
569
570 * - ``debug-use``
571 - ``RegState::Debug``
Alex Lorenz3a4a60c2015-08-15 01:06:06 +0000572
Geoff Berry60c43102017-12-12 17:53:59 +0000573 * - ``renamable``
574 - ``RegState::Renamable``
575
Alex Lorenz37e02622015-09-08 11:39:47 +0000576.. _subregister-indices:
577
578Subregister Indices
579~~~~~~~~~~~~~~~~~~~
580
581The register machine operands can reference a portion of a register by using
582the subregister indices. The example below shows an instance of the ``COPY``
583pseudo instruction that uses the X86 ``sub_8bit`` subregister index to copy 8
584lower bits from the 32-bit virtual register 0 to the 8-bit virtual register 1:
585
Renato Golin124f2592016-07-20 12:16:38 +0000586.. code-block:: text
Alex Lorenz37e02622015-09-08 11:39:47 +0000587
588 %1 = COPY %0:sub_8bit
589
590The names of the subregister indices are target specific, and are typically
591defined in the target's ``*RegisterInfo.td`` file.
592
Francis Visoiu Mistrih26ae8a62017-12-13 10:30:45 +0000593Constant Pool Indices
594^^^^^^^^^^^^^^^^^^^^^
595
596A constant pool index (CPI) operand is printed using its index in the
597function's ``MachineConstantPool`` and an offset.
598
599For example, a CPI with the index 1 and offset 8:
600
601.. code-block:: text
602
603 %1:gr64 = MOV64ri %const.1 + 8
604
605For a CPI with the index 0 and offset -12:
606
607.. code-block:: text
608
609 %1:gr64 = MOV64ri %const.0 - 12
610
611A constant pool entry is bound to a LLVM IR ``Constant`` or a target-specific
612``MachineConstantPoolValue``. When serializing all the function's constants the
613following format is used:
614
615.. code-block:: text
616
617 constants:
618 - id: <index>
619 value: <value>
620 alignment: <alignment>
621 isTargetSpecific: <target-specific>
622
Guillaume Chateletaff45e42019-09-05 10:00:22 +0000623where:
624 - ``<index>`` is a 32-bit unsigned integer;
625 - ``<value>`` is a `LLVM IR Constant
626 <https://www.llvm.org/docs/LangRef.html#constants>`_;
627 - ``<alignment>`` is a 32-bit unsigned integer specified in bytes, and must be
628 power of two;
629 - ``<target-specific>`` is either true or false.
Francis Visoiu Mistrih26ae8a62017-12-13 10:30:45 +0000630
631Example:
632
633.. code-block:: text
634
635 constants:
636 - id: 0
637 value: 'double 3.250000e+00'
638 alignment: 8
639 - id: 1
640 value: 'g-(LPC0+8)'
641 alignment: 4
642 isTargetSpecific: true
643
Alex Lorenzd4990eb2015-09-08 11:38:16 +0000644Global Value Operands
645^^^^^^^^^^^^^^^^^^^^^
646
647The global value machine operands reference the global values from the
648:ref:`embedded LLVM IR module <embedded-module>`.
649The example below shows an instance of the X86 ``MOV64rm`` instruction that has
650a global value operand named ``G``:
651
Renato Golin124f2592016-07-20 12:16:38 +0000652.. code-block:: text
Alex Lorenzd4990eb2015-09-08 11:38:16 +0000653
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000654 $rax = MOV64rm $rip, 1, _, @G, _
Alex Lorenzd4990eb2015-09-08 11:38:16 +0000655
656The named global values are represented using an identifier with the '@' prefix.
657If the identifier doesn't match the regular expression
658`[-a-zA-Z$._][-a-zA-Z$._0-9]*`, then this identifier must be quoted.
659
660The unnamed global values are represented using an unsigned numeric value with
661the '@' prefix, like in the following examples: ``@0``, ``@989``.
662
Francis Visoiu Mistrihb3a0d512017-12-13 10:30:51 +0000663Target-dependent Index Operands
664^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
665
666A target index operand is a target-specific index and an offset. The
667target-specific index is printed using target-specific names and a positive or
668negative offset.
669
670For example, the ``amdgpu-constdata-start`` is associated with the index ``0``
671in the AMDGPU backend. So if we have a target index operand with the index 0
672and the offset 8:
673
674.. code-block:: text
675
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000676 $sgpr2 = S_ADD_U32 _, target-index(amdgpu-constdata-start) + 8, implicit-def _, implicit-def _
Francis Visoiu Mistrihb3a0d512017-12-13 10:30:51 +0000677
Francis Visoiu Mistrihb41dbbe2017-12-13 10:30:59 +0000678Jump-table Index Operands
679^^^^^^^^^^^^^^^^^^^^^^^^^
680
681A jump-table index operand with the index 0 is printed as following:
682
683.. code-block:: text
684
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000685 tBR_JTr killed $r0, %jump-table.0
Francis Visoiu Mistrihb41dbbe2017-12-13 10:30:59 +0000686
687A machine jump-table entry contains a list of ``MachineBasicBlocks``. When serializing all the function's jump-table entries, the following format is used:
688
689.. code-block:: text
690
691 jumpTable:
692 kind: <kind>
693 entries:
694 - id: <index>
695 blocks: [ <bbreference>, <bbreference>, ... ]
696
697where ``<kind>`` is describing how the jump table is represented and emitted (plain address, relocations, PIC, etc.), and each ``<index>`` is a 32-bit unsigned integer and ``blocks`` contains a list of :ref:`machine basic block references <block-references>`.
698
699Example:
700
701.. code-block:: text
702
703 jumpTable:
704 kind: inline
705 entries:
706 - id: 0
707 blocks: [ '%bb.3', '%bb.9', '%bb.4.d3' ]
708 - id: 1
709 blocks: [ '%bb.7', '%bb.7', '%bb.4.d3', '%bb.5' ]
710
Francis Visoiu Mistrihe76c5fc2017-12-14 10:02:58 +0000711External Symbol Operands
712^^^^^^^^^^^^^^^^^^^^^^^^^
713
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000714An external symbol operand is represented using an identifier with the ``&``
Francis Visoiu Mistrihe76c5fc2017-12-14 10:02:58 +0000715prefix. The identifier is surrounded with ""'s and escaped if it has any
716special non-printable characters in it.
717
718Example:
719
720.. code-block:: text
721
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000722 CALL64pcrel32 &__stack_chk_fail, csr_64, implicit $rsp, implicit-def $rsp
Francis Visoiu Mistrihe76c5fc2017-12-14 10:02:58 +0000723
Francis Visoiu Mistrih3c993712017-12-14 10:03:23 +0000724MCSymbol Operands
725^^^^^^^^^^^^^^^^^
726
727A MCSymbol operand is holding a pointer to a ``MCSymbol``. For the limitations
728of this operand in MIR, see :ref:`limitations <limitations>`.
729
730The syntax is:
731
732.. code-block:: text
733
734 EH_LABEL <mcsymbol Ltmp1>
Francis Visoiu Mistrihe76c5fc2017-12-14 10:02:58 +0000735
Francis Visoiu Mistrih874ae6f2017-12-19 16:51:52 +0000736CFIIndex Operands
737^^^^^^^^^^^^^^^^^
738
739A CFI Index operand is holding an index into a per-function side-table,
740``MachineFunction::getFrameInstructions()``, which references all the frame
741instructions in a ``MachineFunction``. A ``CFI_INSTRUCTION`` may look like it
742contains multiple operands, but the only operand it contains is the CFI Index.
743The other operands are tracked by the ``MCCFIInstruction`` object.
744
745The syntax is:
746
747.. code-block:: text
748
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000749 CFI_INSTRUCTION offset $w30, -16
Francis Visoiu Mistrih874ae6f2017-12-19 16:51:52 +0000750
751which may be emitted later in the MC layer as:
752
753.. code-block:: text
754
755 .cfi_offset w30, -16
756
Francis Visoiu Mistrihbbd610a2017-12-19 21:47:05 +0000757IntrinsicID Operands
758^^^^^^^^^^^^^^^^^^^^
759
760An Intrinsic ID operand contains a generic intrinsic ID or a target-specific ID.
761
762The syntax for the ``returnaddress`` intrinsic is:
763
764.. code-block:: text
765
Puyan Lotfi5bd46b02018-03-12 14:51:19 +0000766 $x0 = COPY intrinsic(@llvm.returnaddress)
Francis Visoiu Mistrihbbd610a2017-12-19 21:47:05 +0000767
Francis Visoiu Mistrihcb2683d2017-12-19 21:47:10 +0000768Predicate Operands
769^^^^^^^^^^^^^^^^^^
770
771A Predicate operand contains an IR predicate from ``CmpInst::Predicate``, like
772``ICMP_EQ``, etc.
773
774For an int eq predicate ``ICMP_EQ``, the syntax is:
775
776.. code-block:: text
777
778 %2:gpr(s32) = G_ICMP intpred(eq), %0, %1
779
Alex Lorenz3d311772015-08-06 22:55:19 +0000780.. TODO: Describe the parsers default behaviour when optional YAML attributes
781 are missing.
Alex Lorenzb981d372015-08-21 21:17:01 +0000782.. TODO: Describe the syntax for virtual register YAML definitions.
Alex Lorenz3d311772015-08-06 22:55:19 +0000783.. TODO: Describe the machine function's YAML flag attributes.
Francis Visoiu Mistrihe76c5fc2017-12-14 10:02:58 +0000784.. TODO: Describe the syntax for the register mask machine operands.
Alex Lorenz3d311772015-08-06 22:55:19 +0000785.. TODO: Describe the frame information YAML mapping.
786.. TODO: Describe the syntax of the stack object machine operands and their
787 YAML definitions.
Alex Lorenz3d311772015-08-06 22:55:19 +0000788.. TODO: Describe the syntax of the block address machine operands.
Alex Lorenz3d311772015-08-06 22:55:19 +0000789.. TODO: Describe the syntax of the metadata machine operands, and the
790 instructions debug location attribute.
Alex Lorenz3d311772015-08-06 22:55:19 +0000791.. TODO: Describe the syntax of the register live out machine operands.
792.. TODO: Describe the syntax of the machine memory operands.