1======================================== 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 36MIR 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 42 ``-run-pass`` option in llc. 43 44- You can use llc's ``-stop-after`` option with existing or new LLVM assembly 45 tests and check the MIR output of a specific code generation pass. 46 47Testing Individual Code Generation Passes 48----------------------------------------- 49 50The ``-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. 54 55You 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: 60 61 ``llc -stop-after=machine-cp bug-trigger.ll > test.mir`` 62 63If 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 68After 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 73 ``# RUN: llc -o - %s -mtriple=x86_64-- -run-pass=postrapseudos | FileCheck %s`` 74 75The MIR files are target dependent, so they have to be placed in the target 76specific 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. 79 80Simplifying 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 86- Use the ``-simplify-mir`` option with llc. 87 88- 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 129.. _limitations: 130 131Limitations 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 143- The ``MCSymbol`` machine operands don't support temporary or local symbols. 144 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 151of 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 154``MachineConstantPoolValue`` subclasses can't use the MIR format at the moment. 155 156High Level Structure 157==================== 158 159.. _embedded-module: 160 161Embedded 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 171 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 } 178 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 187.. code-block:: text 188 189 --- 190 name: inc 191 tracksRegLiveness: true 192 liveins: 193 - { reg: '$rdi' } 194 callSites: 195 - { bb: 0, offset: 3, fwdArgRegs: 196 - { arg: 0, reg: '$edi' } } 197 body: | 198 bb.0.entry: 199 liveins: $rdi 200 201 $eax = MOV32rm $rdi, 1, _, 0, _ 202 $eax = INC32r killed $eax, implicit-def dead $eflags 203 MOV32mr killed $rdi, 1, _, 0, _, $eax 204 CALL64pcrel32 @foo <regmask...> 205 RETQ $eax 206 ... 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 214The attribute ``body`` is a `YAML block literal string`_. Its value represents 215the function's machine basic blocks and their machine instructions. 216 217The attribute ``callSites`` is a representation of call site information which 218keeps track of call instructions and registers used to transfer call arguments. 219 220Machine 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 237.. code-block:: text 238 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 247.. code-block:: text 248 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 255.. _block-references: 256 257Block References 258^^^^^^^^^^^^^^^^ 259 260The machine basic blocks are identified by their ID numbers. Individual 261blocks are referenced using the following syntax: 262 263.. code-block:: text 264 265 %bb.<id> 266 267Example: 268 269.. code-block:: llvm 270 271 %bb.0 272 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 284 %bb.1.then 285 286Successors 287^^^^^^^^^^ 288 289The machine basic block's successors have to be specified before any of the 290instructions: 291 292.. code-block:: text 293 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 306.. code-block:: text 307 308 bb.0.entry: 309 successors: %bb.1.then(32), %bb.2.else(16) 310 311.. _bb-liveins: 312 313Live In Registers 314^^^^^^^^^^^^^^^^^ 315 316The machine basic block's live in registers have to be specified before any of 317the instructions: 318 319.. code-block:: text 320 321 bb.0.entry: 322 liveins: $edi, $esi 323 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 334.. code-block:: text 335 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 346``Alignment`` is specified in bytes, and must be a power of two. 347 348.. _mir-instructions: 349 350Machine Instructions 351-------------------- 352 353A machine instruction is composed of a name, 354:ref:`machine operands <machine-operands>`, 355: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 361.. code-block:: text 362 363 RETQ $eax 364 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 370.. code-block:: text 371 372 $sp, $fp, $lr = LDPXpost $sp, 2 373 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 384The flag ``frame-setup`` or ``frame-destroy`` can be specified before the 385instruction's name: 386 387.. code-block:: text 388 389 $fp = frame-setup ADDXri $sp, 0, 0 390 391.. code-block:: text 392 393 $x21, $x20 = frame-destroy LDPXi $sp 394 395.. _registers: 396 397Bundled Instructions 398^^^^^^^^^^^^^^^^^^^^ 399 400The syntax for bundled instructions is the following: 401 402.. code-block:: text 403 404 BUNDLE implicit-def $r0, implicit-def $r1, implicit $r2 { 405 $r0 = SOME_OP $r2 406 $r1 = ANOTHER_OP internal $r0 407 } 408 409The first instruction is often a bundle header. The instructions between ``{`` 410and ``}`` are bundled with the first instruction. 411 412.. _mir-registers: 413 414Registers 415--------- 416 417Registers are one of the key primitives in the machine instructions 418serialization language. They are primarily used in the 419: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 423The physical registers are identified by their name and by the '$' prefix sigil. 424They use the following syntax: 425 426.. code-block:: text 427 428 $<name> 429 430The example below shows three X86 physical registers: 431 432.. code-block:: text 433 434 $eax 435 $r15 436 $eflags 437 438The virtual registers are identified by their ID number and by the '%' sigil. 439They use the following syntax: 440 441.. code-block:: text 442 443 %<id> 444 445Example: 446 447.. code-block:: text 448 449 %0 450 451The null registers are represented using an underscore ('``_``'). They can also be 452represented using a '``$noreg``' named register, although the former syntax 453is preferred. 454 455.. _machine-operands: 456 457Machine Operands 458---------------- 459 460There are seventeen different kinds of machine operands, and all of them can be 461serialized. 462 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 470.. code-block:: text 471 472 $eax = MOV32ri -42 473 474An 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 503For 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. 508 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>`, 517:ref:`a subregister index <subregister-indices>`, 518and a reference to the tied register operand. 519The full syntax of a register operand is shown below: 520 521.. code-block:: text 522 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 528.. code-block:: text 529 530 dead $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags, implicit-def $al 531 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`` 572 573 * - ``renamable`` 574 - ``RegState::Renamable`` 575 576.. _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 586.. code-block:: text 587 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 593Constant 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 623where: 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. 630 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 644Global 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 652.. code-block:: text 653 654 $rax = MOV64rm $rip, 1, _, @G, _ 655 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 663Target-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 676 $sgpr2 = S_ADD_U32 _, target-index(amdgpu-constdata-start) + 8, implicit-def _, implicit-def _ 677 678Jump-table Index Operands 679^^^^^^^^^^^^^^^^^^^^^^^^^ 680 681A jump-table index operand with the index 0 is printed as following: 682 683.. code-block:: text 684 685 tBR_JTr killed $r0, %jump-table.0 686 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 711External Symbol Operands 712^^^^^^^^^^^^^^^^^^^^^^^^^ 713 714An external symbol operand is represented using an identifier with the ``&`` 715prefix. 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 722 CALL64pcrel32 &__stack_chk_fail, csr_64, implicit $rsp, implicit-def $rsp 723 724MCSymbol 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> 735 736CFIIndex 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 749 CFI_INSTRUCTION offset $w30, -16 750 751which may be emitted later in the MC layer as: 752 753.. code-block:: text 754 755 .cfi_offset w30, -16 756 757IntrinsicID 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 766 $x0 = COPY intrinsic(@llvm.returnaddress) 767 768Predicate 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 780.. TODO: Describe the parsers default behaviour when optional YAML attributes 781 are missing. 782.. TODO: Describe the syntax for virtual register YAML definitions. 783.. TODO: Describe the machine function's YAML flag attributes. 784.. TODO: Describe the syntax for the register mask machine operands. 785.. TODO: Describe the frame information YAML mapping. 786.. TODO: Describe the syntax of the stack object machine operands and their 787 YAML definitions. 788.. TODO: Describe the syntax of the block address machine operands. 789.. TODO: Describe the syntax of the metadata machine operands, and the 790 instructions debug location attribute. 791.. TODO: Describe the syntax of the register live out machine operands. 792.. TODO: Describe the syntax of the machine memory operands. 793 794Debug-Info constructs 795--------------------- 796 797Most of the debugging information in a MIR file is to be found in the metadata 798of the embedded module. Within a machine function, that metadata is referred to 799by various constructs to describe source locations and variable locations. 800 801Source locations 802^^^^^^^^^^^^^^^^ 803 804Every MIR instruction may optionally have a trailing reference to a 805``DILocation`` metadata node, after all operands and symbols, but before 806memory operands: 807 808.. code-block:: text 809 810 $rbp = MOV64rr $rdi, debug-location !12 811 812The source location attachment is synonymous with the ``!dbg`` metadata 813attachment in LLVM-IR. The absence of a source location attachment will be 814represented by an empty ``DebugLoc`` object in the machine instruction. 815 816Fixed variable locations 817^^^^^^^^^^^^^^^^^^^^^^^^ 818 819There are several ways of specifying variable locations. The simpliest is 820describing a variable that is permanently located on the stack. In the stack 821or fixedStack attribute of the machine function, the variable, scope, and 822any qualifying location modifier are provided: 823 824.. code-block:: text 825 826 - { id: 0, name: offset.addr, offset: -24, size: 8, alignment: 8, stack-id: default, 827 4 debug-info-variable: '!1', debug-info-expression: '!DIExpression()', 828 debug-info-location: '!2' } 829 830Where: 831 832- ``debug-info-variable`` identifies a DILocalVariable metadata node, 833 834- ``debug-info-expression`` adds qualifiers to the variable location, 835 836- ``debug-info-location`` identifies a DILocation metadata node. 837 838These metadata attributes correspond to the operands of a ``llvm.dbg.declare`` 839IR intrinsic, see the :ref:`source level debugging<format_common_intrinsics>` 840documentation. 841 842Varying variable locations 843^^^^^^^^^^^^^^^^^^^^^^^^^^ 844 845Variables that are not always on the stack or change location are specified 846with the ``DBG_VALUE`` meta machine instruction. It is synonymous with the 847``llvm.dbg.value`` IR intrinsic, and is written: 848 849.. code-block:: text 850 851 DBG_VALUE $rax, $noreg, !123, !DIExpression(), debug-location !456 852 853The operands to which respectively: 854 8551. Identifies a machine location such as a register, immediate, or frame index, 856 8572. Is either $noreg, or immediate value zero if an extra level of indirection is to be added to the first operand, 858 8593. Identifies a ``DILocalVariable`` metadata node, 860 8614. Specifies an expression qualifying the variable location, either inline or as a metadata node reference, 862 863While the source location identifies the ``DILocation`` for the scope of the 864variable. The second operand (``IsIndirect``) is deprecated and to be deleted. 865All additional qualifiers for the variable location should be made through the 866expression metadata. 867 868Instruction referencing locations 869^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 870 871This experimental feature aims to separate the specification of variable 872*values* from the program point where a variable takes on that value. Changes 873in variable value occur in the same manner as ``DBG_VALUE`` meta instructions 874but using ``DBG_INSTR_REF``. Variable values are identified by a pair of 875instruction number and operand number. Consider the example below: 876 877.. code-block:: text 878 879 $rbp = MOV64ri 0, debug-instr-number 1, debug-location !12 880 DBG_INSTR_REF 1, 0, !123, !DIExpression(), debug-location !456 881 882Instruction numbers are directly attached to machine instructions with an 883optional ``debug-instr-number`` attachment, before the optional 884``debug-location`` attachment. The value defined in ``$rbp`` in the code 885above would be identified by the pair ``<1, 0>``. 886 887The first two operands of the ``DBG_INSTR_REF`` above record the instruction 888and operand number ``<1, 0>``, identifying the value defined by the ``MOV64ri``. 889The additional operands to ``DBG_INSTR_REF`` are identical to ``DBG_VALUE``, 890and the ``DBG_INSTR_REF`` s position records where the variable takes on the 891designated value in the same way. 892 893More information about how these constructs are used will appear on the source 894level debugging page in due course, see also :doc:`SourceLevelDebugging` and :doc:`HowToUpdateDebugInfo`. 895