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

    <tr>
        <th>Summary</th>
        <td>
            [AMDGCN] can't select `fpow` when the second arg is from memory
        </td>
    </tr>

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

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

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

<pre>
    When compiling the following code with amdgcn ([godbolt](https://godbolt.org/z/4rG4babWG)), the compiler fails.
It seems as long as one of the argument is non constant, instruction selection will fail.

I am wondering if this is a feature in AMDGCN, or a missing pattern?

```
source_filename = "poc.ll"

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.pow.f64(double, double) #0

define double @f(double %G) {
BB:
  %C1 = call double @llvm.pow.f64(double 2.0, double %G)
  ret double %C1
}
```

Here is the stack trace: 
```
define double @f(double %G) #1 {
BB:
  %C1 = call double @llvm.pow.f64(double 2.000000e+00, double %G)
  ret double %C1
}
LLVM ERROR: Cannot select: t8: f64 = fpow # D:1 ConstantFP:f64<2.000000e+00>, t6
  t7: f64 = ConstantFP<2.000000e+00>
 t6: f64 = bitcast # D:1 t5
    t5: i64 = build_pair # D:1 t2, t4
 t2: i32,ch = CopyFromReg # D:1 t0, Register:i32 %0
        t1: i32 = Register %0
      t4: i32,ch = CopyFromReg # D:1 t0, Register:i32 %1
 t3: i32 = Register %1
In function: f
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./bin/llc -mtriple=amdgcn crash/amdgcn/0/poc.ll
1.      Running pass 'CallGraph Pass Manager' on module 'crash/amdgcn/0/poc.ll'.
2.      Running pass 'AMDGPU DAG->DAG Pattern Instruction Selection' on function '@f'
 #0 0x00007fda9a32d4ba llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Unix/Signals.inc:567:11
 #1 0x00007fda9a32d66b PrintStackTraceSignalHandler(void*) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Unix/Signals.inc:641:1
 #2 0x00007fda9a32bcc6 llvm::sys::RunSignalHandlers() /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Signals.cpp:104:5
 #3 0x00007fda9a32dd95 SignalHandler(int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Unix/Signals.inc:412:1
 #4 0x00007fda98aeb980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007fda97de7e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007fda97de97f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00007fda9a1a2884 llvm::report_fatal_error(llvm::Twine const&, bool) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/ErrorHandling.cpp:125:5
 #8 0x00007fda9ab3709b /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3780:3
 #9 0x00007fda9ab34632 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3682:9
#10 0x00007fdaabbea149 AMDGPUDAGToDAGISel::SelectCode(llvm::SDNode*) /home/peter/aflplusplus-isel/llvm-fix/build-debug/lib/Target/AMDGPU/AMDGPUGenDAGISel.inc:226553:1
#11 0x00007fdaabbd8f3a AMDGPUDAGToDAGISel::Select(llvm::SDNode*) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp:704:1
#12 0x00007fda9ab28139 llvm::SelectionDAGISel::DoInstructionSelection() /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1166:5
#13 0x00007fda9ab2718a llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:937:3
#14 0x00007fda9ab25b5d llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, bool&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:689:1
#15 0x00007fda9ab255fb llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1604:11
#16 0x00007fda9ab22ba6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:468:3
#17 0x00007fdaabbd578a AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp:136:3
#18 0x00007fda9dabbc35 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/MachineFunctionPass.cpp:91:8
#19 0x00007fda9cc739e6 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1430:23
#20 0x00007fda9f508eed (anonymous namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&, llvm::CallGraph&, bool&, bool&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Analysis/CallGraphSCCPass.cpp:179:20
#21 0x00007fda9f50887e (anonymous namespace)::CGPassManager::RunAllPassesOnSCC(llvm::CallGraphSCC&, llvm::CallGraph&, bool&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Analysis/CallGraphSCCPass.cpp:476:10
#22 0x00007fda9f5081ff (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Analysis/CallGraphSCCPass.cpp:542:18
#23 0x00007fda9cc742b9 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1545:23
#24 0x00007fda9cc73e2d llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:535:16
#25 0x00007fda9cc78af1 llvm::legacy::PassManager::run(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1672:3
#26 0x00000000004199ac compileModule(char**, llvm::LLVMContext&) /home/peter/aflplusplus-isel/llvm-fix/llvm/tools/llc/llc.cpp:736:41
#27 0x0000000000417d52 main /home/peter/aflplusplus-isel/llvm-fix/llvm/tools/llc/llc.cpp:417:13
#28 0x00007fda97dcac87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#29 0x000000000041755a _start (./bin/llc+0x41755a)
Aborted
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWVlv6zYW_jXMCxFDIrU-5MGxI_cOkjZIbltgXgxKomxOKVIgqTqZXz8gJVlLk-YuuekEji1xOed8Z-VCtGYHQekVCK9BuL0grTlKdbUlhmykUm1jaHmRy_L56vcjFbCQdcM4EwdojhRWknN5sm-FLCk8MXOEpC4PhYAAJSC8Psgyl9yAcAtQcjSm0QCvAcoAyvqulVQHgLL_ApQFahfkJP99B1DqPhvHpGNJFawI43oFvC3w1p8M1JTWGhINuRQH-ysFhbJyc4g6tDUVBjINhbRiC22IMJYmE9qotjBMCqgpp93TiXHuOPQMejaQ1PAkRUmVRcksdaYtVQIrSkyrKGQCru-2u83PlrhUkMCaaW2HN8QYqgTA2ZQmiLz-4161bFVB9xXjVJCaQoC3ECDUyGLFOUBoNhVfw6wVncRrY5RVJxSyIJznpPgDClkpSqGQ-lkUUMhWnJgooW5o0XJiSM6pQ6qoaZWANa2legYoEVJQq3LHpaQFJ4rCUrZ2PAg8zv-sV408raooACjpOizc4SmFAGFvKmpJKyamNKrzRAhQuHNz4utu8PW1dQv3CG3vxndqsLDekgKilTdKMpAeaClqJj0bv5cw3r5oiu77J2qNqp0faWO1ahQpqNX0i7O-CCnC_rvBdX8UoGvv25Hf3v52B28eHn55sLg2RAhp-miwDSax31UUOMGqRp4sBLgFeO3DTR9M2T3Aaysc3iykwjcueKNBGBNPyU3nvzCzm2Oi6ZScmYJoMxHChANxaJ_xGrJhbMt4uW8IU9PhyEkUDNSRm4Fta3HspWqeMyXrB3qYznMqfqAHpg1VAK8ZRlah3sjdSeD39BypYfhfBprgO9n6g_z4NX79iE8CVn2icHrsWu9vb9aPN1C3ec0MJDBvD1DRRioDjYSL_MzMsc1XhawByqwv9j-XjZL_sW6CMqZ1SzVAGSSihEwUvC1pl7MV0UdoU5KLnT6nPrpoKtu6Ofu_t-o0c6_kQZH6nLhdYlsBlOVMOMYFvKyNYg2nAG_7GuO4AJR1rwBlHkBZnzgddb-n_tAK0SVkrSFA8YZwvlOkOcJ723JHBDlQBVAMpYC1LFsXNfHf0UdxDwq9wsPWhPtf4Xa9uwT4ZrvewfuuHMBPkwL0OBSgnvlgNEuhSyVxb3KbYKH3ZGMlrkqSEozKICfQmQavAV7rZ9093CsmjFP2Z5e5UDIOUuS0l9ooSmqAoq4emi5FZUdZU4uQWp9DGal4w1tt_y-ZpnxwgIo9TVyC5QBlj21jvQig7Ffheh_ZQRCuV0wUAK_DyCYA3x-h-EsoUZTDhdwdjZ-IKLmVJ_lTshKg9Y8WNgpsME9kRQtZ86KIXlL7QytmImu7Bno_YQcpi8aGj-_ZXBKOUuKlRss0hEsVfoCtAx_N1RdMBUsIzdPEg_u9otpIRffKuLXiQP0pifZRcMmZaJ8uD6LtOhpzVJSUKy1ttb_2nnyUJt5Y7gDC4ZRNXNKYJjFUhGkbypkrCjarcZYXl5vf_nX6d35-RSsUA5RphwOgbGUTj37WJW1sdms7mPpZ_-mkEa19daRXzrutv3ijJNFCkjSufEhy6ZB-mSSm7LThZjkmyYJJPDO3T1CSBBOn7LL6viKG8D1VSqpZFvh8sksWtyrus0AuJX9H17ixLJ3fMXEYXBaFc5dNZhhyHHtp_n0CbGRJd9Sm6nNi3a53i9dPj5T3IuE48ezPKFO6kCmIMJrodUln2mqZb2Rd22Q-0fXj9mdZUpe4NrAVbrtVwuJI1GCAec97xOhX6yFKbNT24WTz87TWkDynxA9S2NW07Xr3Wb6C_zXkX4_HxcllSfP2cIb1magDte7VCXJ-2NEzni4JIRSFIR7zkEXkzxGVSYXJG4jeD83MOq_BsOwHUXrDxC7NT1DMi1GOEh-nb_rnVk7WHJMlx_eXp691NN-PojEJWEB4ASj2E_ImoJ7tWpQ3NTOO48djSXE85g4LJVhACfOw_MLccU00K665LP6Y-RzjTJs9M1QRIxXAm2VXSQ1hPSUhS7qXjeWgZ0Mnxne7INW6zXtFuHYPbmHV7dnObW5Q1_Z_Jk5XqaIPN3eUpPNQDJfmDqv8C8295ny0uJ6Z_Hy-M1bnj47RqEs6E6jRAirKSfQmVNWKX8QdKY5M0AHVDOpf-j4eaxAl8xiOF1UijJPXq8Q_gfArioePozm42YKrJHle4BC-Kq3dG09wvgjwx9juBUGGnGuXwcmIaLZcK4oYp3TqmNm9nTvs7z8Qy6cHgLJbeiDF80SCwS4BtqtONFoGzbb2VegllJZ2X0SEFM-1bDUUpKa6cdv5tC-Cu7-Ae2idsn4Rj5vNDJuzZbfQHBvPxyBudPRK52yDEL1nBl4Lwp81s3usqSgTc_uxxYq8UVH-UlFJTL9NUWvObTN9QVvfppgfro0gjtzOf9QGWmrDr6pv0EaXx9y51zx99U0fAS4M3LnBGNsIL2I7QHn6Fri7VwL-h4L7-2APg3AR7MEyaVE0XSdyR2mM257ep7oZy84_gSTEoVsdjEDCBZCEVP7bQP5REH4Uo1lRRMPapvsL_DQlxXDpeHYbu113-XORQm9vf7vbSGHo03cu1YyUXHcn3d33sAF0NTwY12IoXsgblyGCNWHivVkHvju1nagqmZ9sFaRIYrjfc5YXe22IMvtBji855Sp0Oxy2dY-u09FxR144CMYzL8s-XSIPQwI7xjYvzK4L3ClhN-R8TLjOpTK0XNziXZRXuExxSi7olR_FnoewF8UXxyu_wnFZoTxOSlrgKqzSPK68yIuSgHhpQi_YFfIQ8u0X9uMgXpVJnCZlnFe4KJMqLEHg0ZowvnJ3eVIdLtyVyVWYYh9fcJJTrt3FO0KCnqDrBAiBcHuhrpyh8vagQeDZzZUeqRhmuLux7y-ewy0siAAoHu7wIIi8qpEnEHnwdKSiu8ykhRQlJOoAmYaVknV_AXzRKn717bc_Ds3_AgAA__8INeKu">