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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] We can materialize some immediates using add or sub
        </td>
    </tr>

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

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

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

<pre>
    add and sub have different immediate operand rules than mov.

We can use this to materialize certain operands in a single instruction.

define i64 @mov_basic_6() nounwind {
; CHECK-LABEL: mov_basic_6:
; CHECK:       // %bb.0:
; CHECK-NEXT:    mov x0, #-20481 // =0xffffffffffffafff
; CHECK-NEXT:    movk x0, #65468, lsl #16
; CHECK-NEXT: ret
  ret i64 -4411393
}

We can encode this in one:

sub X0, xzr, #imm12, LSL #12

Because 0xFFFFFFFF`FFXXXFFF

If it is 32 bits we can use the w register to our advantage
0x00000000`FFXXXFFF

And if it is something like 0x00000000`00XXX000

We can use 

add w0, wzr, X, LSL 12
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8U12PmzoQ_TXmZZTImK_kgQeyWXSvbnRfWqmoLysDA0wX7JVtknR_fWXCdtNt1XnxgM8cz9eR1lKvEHOWHFhyDOTsBm3y4isaHUZBrdvvuWxbkKoFO9cwyDNCS12HBpUDmiZsSToE_YLGg8w8ogU3SAWTPm8ZLxgvviA0UsFsEdxAFpyGSTo0JEd6RWjQOEnqjcMCKZBgSfUjAinrzNw40mpla7EjhUBpDCzmkz4_1dJS85QysWNiD0rP6kKqBZYdfER0gId_Hh_-25yKw-OJRQXcx0TFPcbf3oyJkokSmEjqess_wDb_P1afV-ykz3DlTDwAE9FG8HgX_gyOjvza3Znsuu4vPM_vRGkSpzvvj3b032H6xziDjvEC_Lk0ZBPHYRjtIw_Ojr90H1Wj23UAvtkK16J44SdbLS9fX82aAE1TKLx_-nRaEhA37AEb6QfJr-VqLOVlWVWVdxfIvx2QA7IQCajJWbjczx_hAgZ7sg6N3wQ9G5DtWSone2S84Fe-2m_EhWqB3sitntANpHoY6dnncxfGeVVV3v24frcffqMvS72XW73VW6GhCNo8avfRXgaYh1m8S9KUZ2kw5ALDJkWR8bjd79KubvY1Si7TbJcmu4THAeWCi4QnEec8zpJ023RdUqOQURgJDGXHYo6TpHE7judpq00fkLUz5mEseBYGo6xxtIsShVB4geWWCeGFaXIftKnn3rKYj2Sdfadx5MZFwkVhmiGNWXKEteh7nfmOvUvWwuwlBr4Z2nh1B7MZ88G5F-s3Y1nhntww19tGT0yU_r312LwY_Q0bx0S5ZGmZKNcyzrn4EQAA__8KwUtR">