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

    <tr>
        <th>Summary</th>
        <td>
            possible illegal asm from AArch64 + global isel
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            llvm:codegen,
            globalisel
      </td>
    </tr>

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

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

<pre>
    this function 
```llvm
define signext i64 @f() {
  %mask = trunc i63 -272678883688449 to i6
  %mask1 = sext i6 %mask to i63
  %1 = lshr i63 -3179364354444895371, %mask1
  %2 = trunc i63 %1 to i9
  %_sext = sext i9 %2 to i32
  %_zext = zext i32 %_sext to i64
  ret i64 %_zext
}
```

gives the following output using global isel:
```
$ llc foo.ll -o - -global-isel -global-isel-abort=0 -march=aarch64
        .text
        .file   "foo.ll"
        .globl  f // -- Begin function f
        .p2align        2
        .type   f,@function
f: // @f
        .cfi_startproc
// %bb.0:
        mov     x8, #56181
        movk    x8, #61893, lsl #16
        movk    x8, #41206, lsl #32
        movk    x8, #21472, lsl #48
        sbfiz   x8, x8, #-9223372036854775743, #-9223372036854775800
        and     x0, x8, #0xffffffff
        ret
.Lfunc_end0:
        .size   f, .Lfunc_end0-f
        .cfi_endproc
                                        // -- End function
        .section        ".note.GNU-stack","",@progbits

```

but then this can't be parsed back:
```
$ llvm-mc foo.s --arch=aarch64
        .text
        .file   "foo.ll"
        .globl  f
        .p2align        2
        .type   f,@function
f:
        .cfi_startproc
        mov     x8, #56181
        movk    x8, #61893, lsl #16
        movk    x8, #41206, lsl #32
        movk    x8, #21472, lsl #48
foo.s:13:16: error: expected integer in range [0, 31]
        sbfiz   x8, x8, #-9223372036854775743, #-9223372036854775800
                        ^
        and     x0, x8, #0xffffffff
        ret
.Lfunc_end0:
        .size   f, .Lfunc_end0-f
        .cfi_endproc
        .section        ".note.GNU-stack","",@progbits

```
I'm not sure which side has the bug, but it seems like one side or the other should be fixed.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVl-PpKgX_TTUy40GQVEe6qF6avqXX7LZt32eoF6VbZQKYE9Pf_oNWP-6s93ZZGeTqVRU5NzD9XIOoLzX44K4J9UDqY47tYbJur3DESe3a23_Yx8m7WFYly5ouwChR0IPRNDtb8zzvL3qcdALQqJ7CaBFCaSkA2ENYRJI_bDBAAirZuWfgPAjBLcuHWjBIWM1E3XTNFw0TVlKCBa0eBdTpCC_8V-JEpLfQTeY8ZPbqHlRSy5KXpVlWTay4nVB2Jcr6V0ke5dVIov88g70LSVwy0RukRHG2T3u9YJLD5qzW3TKubyAHZ4Ldg46F7k-vqv2uZmuo35GD2FCGKwx9rteRrBrOK0BVh8bo7GtMqA9GsIPf8_ESjCmg8Ha3BjILGSQbXFZjHvTyFRrXSD8SCGblesmwo8q3i_fQajMwy17KvNBGyRUEsa2EQhjt85IbQiVAxD2SNgjZBk84KiXm9iGG_rElNHjQqi8owg_TpF_IOxL1No5bOsfCD9cmJMQr1HdoL_5oFw4OdtdCrHhWNW2Ob2Vi8rZPhMqX5pNMLwSRVPcdz7d94qikTw-G29iuxAfQsuCUXEH5exDKCvKmt1By-YK9e2gX6_Ya0QmGeO8ZpSLpirruqpL_lFXQ6-ykmrpIxl9Q0ZfhvPvinN4nuT8t1j0b7j0b4qWe_16mRi4w2TvZgGX_jYH8A9_N7V8XXp4O-lpbDy_iLrLFxsw_9_vf2Q-qO4pCpB9SVe2iebk7Njq4G-G-MRz7Rqi4xZIa2KnFsLqAC3CSTmPPbRxiE-99jxn8-Y3D1n2M130L63yuT1-aR-kahJ-KHi8iOh7dM669PBywi5gD3oJOKIDvYBTy4hAqoekc16Q6vhWgclVAPAzXPWhiquvv4bt_jPL_J-weobFBvCrQ_g-6W4Cr3uESW0bV7uOMdPoKh3AI84ejH5CsOkg0SNYl4A2TOjAT3Y1fbTboF-wz3f9nveSS7XDfSHqijImKrmb9rJrqmpQpWjV0NO2pyioaotC8aYTbVHs9J5RxmnBJKO0LGReSskEE42qqxor1ZKS4qy0yaNjc-vGnfZ-xb2gXMidUS0an45MjEXP49ITfjgcNhtfCpbORvzQ2R5HXK6vty01bcuMxTOX26d1oV1HT0pqtA_-Nm7QweD-ZL3XrUHQxuCoDCg_w-DsDOdBgbCH-x1_tzqzn0I4RWNsK-aow7S2eWdnwh5TbtstOzn7J3aBsMf0kZ6wx_SdfwUAAP__Mr69GQ">