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

    <tr>
        <th>Summary</th>
        <td>
            Error when using GFNI without AVX512BW
        </td>
    </tr>

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

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

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

<pre>
    According to the Intel Software Developer's Manual, GFNI instructions on 512-bit vectors only require GFNI + AVX512F.  Without AVX512BW, however, LLVM errors:

[godbolt](https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,selection:(endColumn:55,endLineNumber:7,positionColumn:55,positionLineNumber:7,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'declare+%3C64+x+i8%3E+@llvm.x86.vgf2p8mulb.512(%3C64+x+i8%3E,+%3C64+x+i8%3E)%0A%0Adefine+%3C64+x+i8%3E+@foo(%3C64+x+i8%3E,+%3C64+x+i8%3E)+local_unnamed_addr+%230+%7B%0A++++%253+%3D+call+%3C64+x+i8%3E+@llvm.x86.vgf2p8mulb.512(%3C64+x+i8%3E+%250,+%3C64+x+i8%3E+%251)%0A++++ret+%3C64+x+i8%3E+%253%0A%7D%0Aattributes+%230+%3D+%7B+%22target-features%22%3D%22%2Bgfni,%2Bavx512f%22+%7D'),l:'5',n:'0',o:'LLVM+IR+source+%231',t:'0')),k:33.333333333333336,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:llctrunk,deviceViewOpen:'1',filters:(b:'0',binary:'1',commentOnly:'0',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,libs:!(),options:'',selection:(endColumn:45,endLineNumber:3,positionColumn:45,positionLineNumber:3,selectionStartColumn:45,selectionStartLineNumber:3,startColumn:45,startLineNumber:3),source:1),l:'5',n:'0',o:'+llc+(trunk)+(Editor+%231)',t:'0')),k:33.333333333333336,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:output,i:(editorid:1,fontScale:14,fontUsePx:'0',j:1,wrap:'1'),l:'5',n:'0',o:'Output+of+llc+(trunk)+(Compiler+%231)',t:'0')),k:33.33333333333333,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)
```llvm
declare <64 x i8> @llvm.x86.vgf2p8mulb.512(<64 x i8>, <64 x i8>)

define <64 x i8> @foo(<64 x i8>, <64 x i8>) local_unnamed_addr #0 {
    %3 = call <64 x i8> @llvm.x86.vgf2p8mulb.512(<64 x i8> %0, <64 x i8> %1)
    ret <64 x i8> %3
}
attributes #0 = { "target-features"="+gfni,+avx512f" }
```

```
LLVM ERROR: Cannot select: 0x55a198567b00: v64i8 = X86ISD::GF2P8MULB 0x55a198567710, 0x55a1985677f0
  0x55a198567710: v64i8,ch = CopyFromReg 0x55a1984e5698, Register:v64i8 %0
    0x55a1985676a0: v64i8 = Register %0
  0x55a1985677f0: v64i8,ch = CopyFromReg 0x55a1984e5698, Register:v64i8 %1
    0x55a198567780: v64i8 = Register %1
In function: foo
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@foo'
 #0 0x000055a192e12034 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055a192e0f8b4 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f418b895420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f418b36200b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007f418b341859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x000055a1904ccd9d llvm::DisplayGraph(llvm::StringRef, bool, llvm::GraphProgram::Name) (.cold) GraphWriter.cpp:0:0
 #6 0x000055a192be1130 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3019130)
 #7 0x000055a192be70a2 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x301f0a2)
 #8 0x000055a1916ef042 (anonymous namespace)::X86DAGToDAGISel::Select(llvm::SDNode*) X86ISelDAGToDAG.cpp:0:0
 #9 0x000055a192bdefc7 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/llc+0x3016fc7)
#10 0x000055a192beb479 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/llc+0x3023479)
#11 0x000055a192bee141 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x3026141)
#12 0x000055a192bf0a9f llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#13 0x000055a1916f90c5 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#14 0x000055a1920d75c0 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#15 0x000055a19257e6b0 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x29b66b0)
#16 0x000055a19257e829 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x29b6829)
#17 0x000055a19257f410 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x29b7410)
#18 0x000055a1905a1d0b compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#19 0x000055a1904db832 main (/opt/compiler-explorer/clang-trunk/bin/llc+0x913832)
#20 0x00007f418b343083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#21 0x000055a190599c2e _start (/opt/compiler-explorer/clang-trunk/bin/llc+0x9d1c2e)
Compiler returned: 139
```

I didn't check all instructions, but PCLMULQDQ and VAES have similar CPUID tiers and may have similar issues.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWVtzozoS_jXOi8ouEPcHP_iaTVUyyYnPzJx9SgkQNieAWC6Jc379dkvYRrZzmUy2alMOhlar9anVVxyK-GU8iSJRxWmxJo0gzYaTq6LhGVmJpHlmFSdz_sQzUfJqQL2a3LCiZdmAzsjl8tsVSYu6qdqoSUVRE1EQx6TDMG3IE48aUSEpeyEV_0-bgiQ5Y0CnZPLjL2Bcjgj5mTYb0TYdZfoTBW_EMyxZ4e319Y8bwqsKRA2sycCYD4zd1ZmuRRyKrBk48wH1N01TSh66hE83NBLVWhKstRwygRE-rz9s4CESMV_EKcAHBKkc9ZM04wXLuXzygNmDsUQUzSpiGVJNuyN8r_ndVrEZiu1vHIbvjBW4VpY95fBU84xLtakFeBHPRNbm-Og4MA6E67Tg39o8BFVYE5RUijrFKTrnjnrCvl9i1bCq2U8yT4a0mXL4dMI5vgAHRFtFnV5iHmVgMXDCA-pYMxd0Mt3Cf-rj8wLptoH7H219d_S0Tmjp520WjuDopf7PTpq9Lg8AOGAKeIl5AujeXjoR4rPLTDMBJ_3QFmgF8QOL40rxU8tQN960AzPtfRwQ0MkFI52CiOyLtaMWMd7Er3jMg74OECvevDfP2inZm8s71jRVGrYNr480ILfYaUIOUDCaNW-GCWdNWyE_0DpGdUen66RIJXi4Z09b2GvSDU67JT1laJmyMUc5VaG5mFBPGC1g3tU9XDq77BB2Htv0ZwVK7iPQLGtkaX_uYUH7jQXVA4Yd44z02fnokpcQTHqxZU_B2BBBNC0eYTDmT2nEf6T8-bbkhR530qzhKiBSP9RwhWnBqheNG8TnvGhuIRBrrDHPISBlXCdCmIa48MRrjcy3PIID1-SmmCU0riwNK1h9BvFTo4O55MeqSTK2rs_v7neiKkCoexrHlUQpk5N2YK_HXvtc7LXOxV771dhrvR575aQ3gq91EnzVjHOMWvQ1P-wkGMuySDqG3xlboJ52SW_vMsH_jddAiVC2zcFnuISaxp0R_KLNPFes7NvcBzV324GYiuR1Jc72_v1pNX6FFntbou8KOTcZCrBaeYiNBFVzuYb6SG-TpC7lkwHmD7IlkDusBXk7kfVZscg7IgT9Mk-l9VPxXSp_TxQ5TdtQgFoGGUCSkgsQ-MOUBFPnBPPzp7eCYowTEEg195vC1SDlnrJY3aYh4cmbQ5Lt8AI6wAwPp0mVDjChYsbcJ9NDKqVkL3N_fFodrRNlwb24v7-9h5MnM1YUoiEqYCHB2DoOMwPfcb3QMJDy5NqpL-H95btXqzmakjW5XNI7_-b79bQ_wzOlevqUxNjp5YhvJxkT2EaKh0D-sqxEfs_Xe2abO26APASoad3I0NghwsPY67wn3WVHuHdTtSlHIL8CjnkWjue_AaebclWQpC12GYug7Uv63fVislqQug1zaLkYCds1WFcpqgZbuaOOCBqtNhxBNQAPKlvKr2FZib_xdOkyresW7WlJWBFDZxdlbcxlRxhVrN6QkEWPTcUiPlLLQ_qKHknc5uW-NzNgKLirxLpiOQE7bbH0QBCwmyVkYrjuyp0h35aZqDBSLiPM4sMukC6hiJHgIjIUOI-VJc6W0XdUkyG44pDV-bB-KRoGEX4uSxH0qV06XCg0JqK5B-fH5rZkNfqSt-w0Se6QAO0sW8vWFrvXXMRtxpFLE0a9bsf0nECwezKfXA6BE76ge953xGS1LzSU_N0pyhW6IOZ1ZiHd3Nga8CeNg3KTGpZN7irYnlT1n6j7VbouWPYvOCGZZPwnAVmQTjDWqaF6FJWlzAr4v5dt6rKNxA9tciwMVnpXEO0EeYlt-qEfODY1yMMDRCLIyPwBbE-m7SWUYnCFs3pw7WGWFu12uC5aNVA2m4qzeFSLEfYOxta0QcohSsIylraM5VLDCEnF0pp_QH6Ekl0p2bZgoibZ1iXDxQkIC8WHkPckUwoTNclOX8eGHUVxEBPpazIoztO6zNjLJVQfG1jpMLCCWF-s73mCoSMUQr5eOQzLCZ1TKco3fBUBBwVSwKOzGO8l188qhdBx_uBczQJCbppgcD0QO1sFI75aqdLemqgM8G_eqGEd9vwblvrK-JTqftnFpSYtwwxMSz9_7witZzD6LlpFxQYEyrAc3e483BlpixqMnMck2rCKRNAgNMcjnTP85sYSwK1tzO9vzHR5YtgUF2GFKF5y0dYEa5W6ZNi9Bgo6hBjY55_izGZfPxGZj3m2m3jeKAJdzVBuRd67ap6LXpDrxTj_C_TlAoBDDQhxyzgyhND2gvfNFtRwyYtJES8gNcLQl4CD2OEFGjjzCBw3bfODVgot65TVaYRvlh5r7Rj3KaqzS_cLoLuATINOdehgp0HyLnSQflvcsGgDRfkOpQb9ZGyHfVRCC4vRPiDHok8tE_FZup8kgRE5n_KTT2J-130QpK0p0Yg9J-rH1CPJWHH0MJ0F86bmzsg7j0vLRNTxuBv2cS3vcOqu9vllRJ-2QxqELiDR7NA9hurT4ANQb2Sppp9jR_oSmD7VPd07ggnFQ1-jGV-z6EXd9wBf5eXBCv9nYD3b1HWq5RgDLjEUT53gveIw88lUMdHLDWwBZwJK6u0u9MBS580s0AueOPShPMxZWvzWjqAWADn9DVHjqGazDN-CohMLsgf5cuyht-pH6zcbhGirmLragiCinCj5v7eh2ARJ-6V2r4jwTUBbQamB_ZFpHb9k6XfpVyROY-wiGihYOHRd-KKi_9ubrBzbhtzNrqHt_mP-h-zhfkwWK7JhT5zUaZ5mUOnM7r5fzUmT8qqWHDl70RlUEzi64GPTdT3DN0wjuIjHVhxYAbto0ibj4wX-IEeeN7wgbY2tkPxh7_nop7yLtsrGn29CHd_1vYvN2ImSyKKxzahtOa7jRJ6f-F5iUu6Hbmj5FxkLeVaPB850QGnBn9UW8IWIM79Ix9Sg1DRoQE0bfHpE_diMXcNyHdMNLBpCG8bBdrKRfMsjqvVFNZaQoJmu8eUPNOP1YRBcG6tDLpcD-ayFTVdjfPcY_tNm7Ll-TC8kgLHcwH8B4YhZ6Q">