<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57461>57461</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [riscv64 asm] Instruction LI with symbolic constant rejected by ASM parser
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          jmillikin
      </td>
    </tr>
</table>

<pre>
    Given the following riscv64 program in assembly:

```asm
.data
        .set .L_STDOUT,        1
        .set .L_SYSCALL_EXIT,  93
        .set .L_SYSCALL_WRITE, 64
        .L_message:
                .ascii "Hello, world!\n"
        .set .L_message_len, . - .L_message

.text
        .global _start
        _start:
                li a7, .L_SYSCALL_WRITE
                li a0, .L_STDOUT
                la a1, .L_message
                li a2, .L_message_len
                ecall

                li a7, .L_SYSCALL_EXIT
                li a0, 0
                ecall
```

The GNU assembler accepts `li a2, .L_message_len` as equivalent to `li a2, 14`, with the constant symbol substituted by an integer literal.

LLVM's assembler rejects this same construction with an error:
```
$ clang --version
clang version 16.0.0 (https://github.com/llvm/llvm-project b65d3eea662d364da9be3cb7c2b36dc3a853c108)
[...]
$ clang -cc1as -triple riscv64 -filetype obj -o hello.o hello.s
hello.s:15:10: error: operand must be a constant 64-bit integer
                li a2, .L_message_len
                       ^
```

Output of GNU assembler:
```
$ riscv64-linux-gnu-as --version
GNU assembler (GNU Binutils for Ubuntu) 2.34
[...]
$ riscv64-linux-gnu-as -o hello.o hello.s
$ riscv64-linux-gnu-objdump -d hello.o

hello.o:     file format elf64-littleriscv


Disassembly of section .text:

0000000000000000 <_start>:
   0:   04000893                li      a7,64
   4:   00100513                li      a0,1
   8:   00000597                auipc   a1,0x0
   c:   00058593                mv      a1,a1
  10:   00e00613                li      a2,14
  14:   00000073                ecall
  18:   05d00893                li      a7,93
  1c:   00000513                li      a0,0
  20:   00000073                ecall
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVk1z4ygQ_TXyhZIKhJCtgw-ZODubKs9O1U6yH6cUQtgmiyQvICf599NIxpacOLVLuZCB182ju3lS2VZvy6_qIBvkdhJtWq3bF9VskVFWHPIM7U27NbxGqkHcWlmX-i2iNxFeRTj0OR5-3NbDTFJxxwOkSKx0KFk__XhYfX98iNJbdGzkPeTvH7c36_XT3V_3A7CgVzF__n7_cOdBeXbGrJ9qaS3fyhHHwi9wK5RCUZr-KuGE3uylNbqKUhKx2wbm3-1zdPSkZePhCYpHs-PzJ06-urP5Vrcl1-jJOm7O08fhlJVWiM9755fHugDhABpCOF7liJPj6gW3YJxOl_sDjSBScK0n-bzKrU_LR9TwNYehNMb-H6DOvv72GMpJGsSFkHtnEQCvEc4x4JH8t1MHDmOHXDuBk8zv4tOq3K4vZdE2EHNA2re6bDWyXWmdcp2TFSrfEG-gpJ3cwvZaOWm4TsYk1-s_vkXp3I5YGvksBbB0O2WR5fVxC9MJp9pm2Bi8SmNac070RQTSDAnN4X7F8UEaC4bDwjB5nEIkT3CCoVwXO-f21ntLf4HfFvboykS0NQy0PoRHDLfUk0NlzioqJc_ztKJ5VvGilFSUc5GWNK8E5QtGBcGLKC2OhNiXJEkitnrHTwgCEY-dUXstT3IQb5SW7m0vUVs-o7hFO3-fkvC0g5swoDeE-Q5DdwoMavcQ7qZCdWeBsUT8nKs8i0vlQmYGZ-iifVrTl-Bji9jdJxX5vXP7zqF2M63Lz5J4jEesVdO9xtumi32wpjmdFjkk0098AQOntAWpNeix7BrXQTJQmtDsakY-3uxK7D82gGxVXb1HcRWsxgEIU3SIn8-x51dzh6Te9I6cg0N4t1Op8P1K2fBq8DG0crgQgy5O3xX4oqGI3gZpvDthgQLuBwXOALQo6CiTXnag68UpSD_MZ0cDTDBm5CMDLw_khF8EPDRWzCd43qm98E-vrPgVn4zEyYgt2AWr-hAs-GkXEo6BJcb5h6x8JZPTMUg2ooXnU4ORsAIyHIBVn0UovEDBQIxPfDVCp8Om-L9RubgcM7kkeU6KNCMZnVVLWhW04DNQXi2XUNtBSPzHAluh-5GCru8HER0EW4mzLAzSOwj3zY9vaM-NlWbWGb38fwIJQ2VtJy38YfMsJ7Pdcl4JXuANrUqBs7QqiNhgxvJSzAteLOZkpnkptfXk4TuhkS-od-G_GdhqppYpTlO8oAQzyjKalHy-qTbphpGM4ZSyKMOy5konnkfSmu3MLHtKZbe1sKiVdfa8CDdJbRvZx8r7553btWb5XCut1T-qmfWbL3vyPwEkq7Wm">