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

    <tr>
        <th>Summary</th>
        <td>
            llvm-tblgen produces invalid X86 description, causes LLVM build failure on PPC
        </td>
    </tr>

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

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

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

<pre>
    `llvm-tblgen` seems to give an incorrect X86 target description which leads to LLVM failing to build on PPC:
```
FAILED: lib/Target/X86/X86GenDAGISel.inc /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm_build-.ppc/lib/Target/X86/X86GenDAGISel.inc
cd /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm_build-.ppc && /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm_build-.ppc/bin/llvm-tblgen -gen-dag-isel -I /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/
lib/Target/X86 -I/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm_build-.ppc/include -I/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/include -I /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target /
var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86.td --write-if-changed -o lib/Target/X86/X86GenDAGISel.inc -d lib/Target/X86/X86GenDAGISel.inc.d
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86.td:656:
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrInfo.td:3157:
/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrAVX512.td:11660:3: error: pattern may store, but mayStore isn't set on the output instructions
  def : Pat<(store f16:$src, addr:$dst), (VPEXTRWZmr addr:$dst, (v8i16 (COPY_TO_REGCLASS FR16:$src, VR128)), 0)>;
 ^
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86.td:656:
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrInfo.td:3157:
/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrAVX512.td:11544:3: error: defined here
  def mr : AVX512Ii8<opc, MRMDestMem, (outs),
 ^
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86.td:656:
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrInfo.td:3157:
/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrAVX512.td:11581:17: note: instantiated from multiclass
    defm NAME : avx512_extract_elt_bw_m<0x15, OpcodeStr, X86pextrw, _>, TAPD;
 ^
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86.td:656:
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrInfo.td:3157:
/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86InstrAVX512.td:11606:17: note: instantiated from multiclass
defm VPEXTRWZ : avx512_extract_elt_w<"vpextrw", v8i16x_info>, VEX_WIG;
 ^
Included from /var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/lib/Target/X86/X86.td:16:
/var/tmp/portage/sys-devel/llvm-15.0.4/work/llvm/include/llvm/Target/Target.td:1170:1: error: defined here
def COPY_TO_REGCLASS : StandardPseudoInstruction {
^
error: Errors in DAG patterns
[...]
```

Related: `llvm-tblgen`when built with GCC 12 on PPC malfunctions. When building the PPC target, it will hang most of the time, but when building the X86 target, it gives invalid output which later causes the LLVM build to fail. This was originally reported at https://bugs.gentoo.org/880677.

Building with GCC 11.3.0 and snapshots from releases/gcc-11 are fine. Building with GCC 12.2.0 and snapshots from releases/gcc-12 are not.

Miscellaneous observations:
* I tried building LLVM with UBSAN on amd64 (not ppc) and hit some warnings in LLVM 15 - https://github.com/llvm/llvm-project/issues/59485 - but these seem to be fixed in LLVM 16.
* We can't build LLVM with UBSAN on ppc because the resultant code is too large (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108208).
* The hangs are more likely to happen if building with `-D_GLIBCXX_ASSERTIONS`.

(I'd like to apologise for not being as precise as I'd like to be with this report. It comes out of desperation as we've tried various techniques to get more information and we're at a loss.)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWE9z4joS_zTKpQuXLcCYAwfCnxRVk5lUyGaye6GE1djaZ0teSYZkP_1WyxCYZLZ2aifvzWWqErCF1K3u_vVP3RLOqUIjTtjwmg3nV6L1pbETX6ITNf1fbY18mbA0rqp93fPbqkDN0hgcYu3AGyjUHkFoUDo31mLu4SlLwQtboAeJLreq8cpoOJQqL6FCIcO6T58eb2EnVKV0Qe_bVlUSjIa7uxnrT1k8Z_GUpfHxL7wup6tPiznrT6FSW8aXD0EL48unLO0-b1DPpzerNVaR0jkwvtwLy_jS1w3jy8ZYLwpkfOleXE_iHivGl8GyZBjF0YDx5cHYP46Dm7CnXtQ0OY38kMpuo7n8ONXAeMp4-qG2bJU-Te5CCr0CdU-KoqccVtBb_aQ6xpedJ957DXqrjzRF6bxqJf601G9E_bz1l3bDqzc-TuYlAiMvodc7WOWxp3a9vBS6QAk986Np0pM_ODOSnR2rzlMSdtbUH-usN4ax_jQdpq-E8BcpXmnn7UrvTLeDfjIcnTnpT1U6fXwaJrxTmyRpGpN6Yjy01lh6aIT3aDXU4gWcNxYZn8G29TSwpndQTjM-8uDQE6H6EsG0vmk9KFLR5sTHrrMGQOIOSO6d8Kw_YzwLQmGXBK_zgbM5aRBS2m5AOs_4mMYYzx7vFk8P91__Udu3M8LP-0wlRF3Z7Mvd3zcPXzb3i5vZp-l6Dcv7Nwoe7xOeBcFBdkzf_QXrXx83yoaL3-D7K8E3HAzegU_iTmmUUKLFSwDVNmCoE7BSGevPTBPCent_O0fnb7E-QsK03nUx_h3YXxTYLKFvUg7aeKRvYgahvRL-5Ia6rbzKK-FemSKEuobP09tFiLbYPw8TvsFnb0XuN1j5zfawqVl_Fj8nQwr3lyY3Etfe0stTljY090AvG8ptPoOH6d38d47_ugMmTv8PKAQYnJj_v0HhEE4Tvj_FnFO4w3nwvFF6Z44AeFw8bb6ubn41BpL04_x_rCPPA69Ku4eT80d0uCf_g1-JXd8dnjR17YWWwso7h600q_PJDmx09OWrK1_lL-jBgdIwn96cSgl3mn0dRREbzr_be3Wf91gRLEjUu57wUKIObZyHg_Il3MxmkPBjSwe1qHat7kqPCL6e5srQ_pUY5vijn2agSEZVAZWyUBvnwezCNK_q14Ln8E7IufU8CqHulMzdi0rJUxV07ESFRwu5aB26sDh0pF0b6k1oTSN4KJWDg3BgrCqUFlX1AhYJEihBeCi9b1woY5bUVrWFiwrU3pjI2ILxZZbF6WgUXbrw-rThs5OSqB_FILQEp0XjSuNdB3qLFQqHjvFlkee9JAFBpZnSGMF35PCI_5gcHuRo47_Z2a1yOVaV0GhaB2br0O5FVyuec2MKK_BWoTx7Pjgu7OJv1-vpZ4q4qGU6oNNeGw-hURuHfZXKgzM1wkFYrXQRoBjWJ0PovXFnoXzZbqPc1BdZTJBrrPkn5pRQyrk2mDUcDzKSQLjwJToMNxThYoEc9ozyrCmNzsZ8RchFVy53of-OMdSEbzEgJQDFomsrokig0w2UA28MVIQ7MvmNEXkeFbo94mHbFv9WVSWITUpz2GzbIsoLxfpLJVl_nsQZj6kIvtjhQ4khDVyIWU21eaX-wOqFjCtF06AGtTtHI-ydpXFvvrn5tLqePT1tpuv14v5h9eXzmqXxNyFnPFsxPpJBJAkUjalMoRzCzlhCCGyRpAoHjcWcfhAOvl2zxU6pp2TpsiOCFXmnRkdJR8kr0TVoA5xIwgEZH-3xCKW9sIow5zEvtfpXi93VEvrOXjoubH1cq2W32CIloIDKOBcxPr6Sk74c98fiCidJOkrG40EcD67KSX-Xjvu7wWgrdiLN-Sjmu2QnMOMyxm06HF6pCY85TzgfJtkgHQwixGw4SgZS4niwi7M-G8RYEx8Q-iiSVwF3k-E4HWdXldhi5U43aHYSIEpUwAZxpZx352Ve-Qonl_cujTWyzS84iijs4tqMeOzIURf8ROTUWjxy61Vrq8nPpE46zv4TAAD__2HORH4">