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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64][Clang] Internal Neon types missing in Clang
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          rj-jesus
      </td>
    </tr>
</table>

<pre>
    The [AAPCS64, Appendix 11](https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#11appendix-support-for-advanced-simd-extensions) (Neon) states that:
> The AARCH64 architecture supports a number of short-vector operations. To facilitate accessing these types from C and C++ a number of extended types need to be added to the language.
>
> Following the conventions used for adding types to C99 a number of additional types (internal types) are defined unconditionally.

These internal types are copied below:
| Internal type (8)   | Internal type (16)   | Internal type (32)   | Internal type (64)   |
| -------------   | -------------   | -------------   | -------------   |
| __Int8x8\_t     | __Int16x4\_t    | __Int32x2\_t    |                 |
| __Uint8x8\_t | __Uint16x4\_t   | __Uint32x2\_t   |                 |
| | __Float16x4\_t  | __Float32x2\_t  |                 |
| __Poly8x8\_t | __Poly16x4\_t   |                 |                 |
| | __Bfloat16x4\_t |                 |                 |
| __Int8x16\_t    | __Int16x8\_t    | __Int32x4\_t    | __Int64x2\_t |
| __Uint8x16\_t   | __Uint16x8\_t   | __Uint32x4\_t   | __Uint64x2\_t   |
|                 | __Float16x8\_t  | __Float32x4\_t | __Float64x2\_t  |
| __Poly8x16\_t   | __Poly16x8\_t   | | __Poly64x2\_t   |
|                 | __Bfloat16x8\_t | |                 |

[Appendix 12](https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst#appendix-support-for-scalable-vectors) defines similar SVE types, such as `__SVUint8_t` and `__SVBool_t`.

While Clang defines the SVE types, **it does not define the Neon types**.
GCC defines both. https://godbolt.org/z/EbnaoPrhz

Should Clang be defining the internal Neon types?

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vl2PqzYQ_TXOyygRDB8LDzwQdmnvQ6vV3e3tY2RgErxycGSb_bi_vjIhgaTR9rbVzQNBxzNnzvhYHrgxYtcRZSxas-h-wXvbKp3pl-ULmd4sKtV8ZM8tAYvWef5YPMUhwwLyw4G6RryD77PonmHSWnswLMgZlgzLnbBtX61qtWdY5l9_Wxq1tW9cE8OSV2LJOcOykqpiWO656BzMD7Vx5Ke3lTaWYeD7fKy1NP3hoLRdbpVe8uaVdzU1SyP2zZLeLXVGqM4wTIFh8jupzr0ayy0ZsC23Tpx3z7ycBQ_gOsrzr8WvcQhc162wVNteE4w1DHDo-n1FGtQWTOvKvlJtlQZ1IM2tq7WCZwVbXgspXBngdU3GiG4HtiVDYD8OZGCr1R4K4F0DBcM1w_UF9yC9oWaM7si9KqgIeNMc321LIHm36_mOVucepmZKJaV6G-tCrbpX6gaB0BtqYKu04xrWhxpWQZGmFyrcukvhcoxhmIjOkj4jbje5JmhoKzpqoO9q1Z2S5MdJ1_B8Htq_zB-Sa3UQ1EBFUr1NftwV8GUe64onrh7AzTU__mQxwE8W3fkaF6fay_lvzPwf2ES82XzpbPKesKjYWIAxZUD9-D08w2c0wHe8QK9_V_R_iBn_BM3JJ3RO_o_cx7RSKj5nm6Ezth8Q-qjkx5VQB10LvcHyIzLX20ud_4lqNMuP_26LH888nJt1w8I4PO3LTa8m-gu7kpt23TBxor-Sf6vfycDkpoHh3I8BnNHfdPBa_mjihfxp5V-KPds4Oyef23Z8RutpGuFPnkY3Z5GpueSVpHFCDFfl8Zo0YMReSK7h6dvD6R4twPR1C9wAi73N5unbcDQ2lsXeMCVGdK2UHMCLq_XPVkiCwo2Dcw1361_wM8wZ5sJCo9xIUXYMHSLdaDyFurCR_peiOBNWyrYruNpE1VRK2pXSO4bld4blQ9Vx9ajb73N9T63qZTMKrMZxcRpN54kw0xCUx8RFkwVNGqR8QZl_h2mURkkSLdoMkTyO9TatvKC6a5Iw9eK6CkJKkxhrxIXI0MPQ9xB93088XHlREIdpElKMVAUYsdCjPRdyJeXr3jWwEMb0lPl-gOndQvKKpBk-gBBrJ5yhO0cLnbmEZdXvDAs9KYw1E4UVVg5fTXmu6zYO3cGL1kPfLLqfRs_UKuzF8etAdMf9WfRaZp8cVVdr_FsetHqh2jIsB-2GYTnKf83wrwAAAP__q8DXCg">