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

    <tr>
        <th>Summary</th>
        <td>
            [MC][RISCV]MCID::Return
        </td>
    </tr>

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

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

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

<pre>
    I noticed that RISCV bytecode use `C_JR` and `JALR` as return, here is a toy example
```
int bar(){return 0;}
```
and its byte code looks like
```
0000000080002060 <bar>:
80002060: 13 01 01 ff   addi    sp, sp, -16
80002064: 23 34 11 00   sd      ra, 8(sp)
80002068: 23 30 81 00   sd      s0, 0(sp)
8000206c: 13 04 01 01   addi    s0, sp, 16
80002070: 13 05 00 00 mv      a0, zero
80002074: 03 34 01 00   ld      s0, 0(sp)
80002078: 83 30 81 00   ld      ra, 8(sp)
8000207c: 13 01 01 01   addi    sp, sp, 16
80002080: 67 80 00 00   ret
```
Compile with `C` extension, the result is
```
000000008000204c <bar>:
8000204c: 41 11         addi sp, sp, -16
8000204e: 06 e4         sd      ra, 8(sp)
80002050: 22 e0 sd      s0, 0(sp)
80002052: 00 08         addi    s0, sp, 16
80002054: 01 45         mv      a0, zero
80002056: 02 64         ld s0, 0(sp)
80002058: a2 60         ld      ra, 8(sp)
8000205a: 41 01 addi    sp, sp, 16
8000205c: 82 80         ret
```
After checking the RISCV Spec, I noticed that ret instruction "0x00 0x00 0x80 0x67" and "0x80 0x82" is `JALR` and `C_JR` respectively. However, when I checked the generated table "RISCVGenInstrInfo.inc", these two instruction does not have `MCID::Return` tag.
```
    { 12802,    3,      1,      4,      6,      0,      0,      RISCVImpOpBase + 0,     7835,   0, 0x3ULL },  // Inst #12802 = JALR
    { 12473,    1,      0,      2,      6,      0,      0,      RISCVImpOpBase + 0,     7991,   0|(1ULL<<MCID::Barrier)|(1ULL<<MCID::Terminator), 0x8ULL },  // Inst #12473 = C_JR
```
Instead, the instruction with `MCID::Return` is `SRET`, `URET`. Why do we ignore `JALR` and `C_JR` for the `Return` tag?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVk2P4jgQ_TXmUhpUsfN54ABh2GXUo5V6ZnaPKycpiHdCjGwD3fvrV3Zg6LRourUWwnJcz_Ve-VFEWqu2PdGMJQuWLCfy4FptZk7JvtLtpNLN82wNvXaqpgZcKx08rr-Vf0L17KjWDcHBErAUy7-_PLIUQfaNX36ZPwxLC4bcwfSMl9CSIVAWJDj9DPQkd_uOGC4ZzlmK509Yqt5BJQ3jOeMFyxbDGYBMLFi2vAnxiZWzgRgEZp3WPy106uftHHgeOSJyTBGYKH1O8ZmJ-RBy2WJiDpEAjPxnswEA2TQKAMDuvbDh-1OUjmCxh3EBIoYoAkQf3kAYRnpAznjuocUIll9gCPkrmEUPw5uw-kIyPvN8QRKvJMccs1_SEp8JEXbHIZUMmH_J6FF80IRBE57Jde-Ty4KmfKSpe78UWT0q_FjT_i1NedCUZpDjWRN4D970QKl3e9URnJRrg4u9Z-nJUW-VDp51LYEhe-gcKPsBH8X1mz6Kg5w48m64jCDnjoliCgVPgeJfmA-YKAk14BwIP2KehIcsCJiPmd01TzKYIYI4-YW6b58kDQgO6VVN19xlFpwjOaT4EvGufnkuNUYfcEwSLibn3jGX8ZZj5htHBuqW6p-q3wZ7DA3x255qf_SrbmnIgeqtM4faKd0D4xyffKWHL-_RpzRjnA-d0--GZzn3z5QdNdOht15arSG7p9qpI3XPU_hdn-hIxlM4tdTDeiAZeBBsqScjnV_JqiOfKND-jfq1Z7fuN3qq-ppxfna9JXAnPeLeaLJeHbTyGJr-13K99CYX88ehyacITm6nNyvnq8qyBUQ8R5-EYSGGKRqmeJjSYcLRFMiud_s_9gvp_3D4As47WS6Sayjgk_jx8AD-X4KXAIyvGF-B1wiMi5AbmFhCqOkrXnE2JnTOwP8fr-J6TFYynkc_Hh6YKJkor2VbSGOUv7Ti7ZjvZHaql06HsCAxvysxzkSQGHxy6yZ8KMnm0t5eXvGlEd662cGM3x4_f_cn8dKvfgyrKfzVPkOj4USgtr02dMe3G21CXpbiyDZMrCbNTDSFKOSEZlHGI56LpMgm7Qw5CplQRSJrMEp5XRfVhgoZVxhjhnKiZhx5jFmUYxoVSTatCkyLZBMLEWVxxCMWI-2k6qZdd9xNtdlOlLUHmhVFLPJJJyvqbHgL4rynE4RN_2tIlhMz85hP1WFrWYydss5eT3HKdeH16WvJkiVLFsESLFm-LuHkYLpZ69ze-qfh0rbKtYdqWusd4yt_4nn6tDf6H6od46vAwzK-GngeZ_y_AAAA__81M3jh">