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

    <tr>
        <th>Summary</th>
        <td>
            LLVM ERROR: Cannot select: intrinsic %llvm.ptrauth.auth
        </td>
    </tr>

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

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

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

<pre>
    I try to write new pass using ``llvm.ptrauth.auth`` and it seems work well in opt, but when I try to cross compile the result IR with LLC, it generates the crash.

Here is the compile command: ``llc-14 --march=aarch64 output/main.opt.bc`` and here is callstack:
```
Stack dump:
0.      Program arguments: llc-14 --march=aarch64 output/main.opt.bc
1.      Running pass 'Function Pass Manager' on module 'output/main.opt.bc'.
2.      Running pass 'AArch64 Instruction Selection' on function '@foobar'
 #0 0x00007f5131519311 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe4b311)
 #1 0x00007f513151705e llvm::sys::RunSignalHandlers() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe4905e)
 #2 0x00007f513151984b (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xe4b84b)
 #3 0x00007f51306bf420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f51301b000b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f513018f859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f51314542f8 (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xd862f8)
 #7 0x00007f5131d31f01 (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x1663f01)
 #8 0x00007f5131d313a8 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x16633a8)
 #9 0x00007f513301f731 (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x2951731)
#10 0x00007f5131d29fff llvm::SelectionDAGISel::DoInstructionSelection() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x165bfff)
#11 0x00007f5131d296c4 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x165b6c4)
#12 0x00007f5131d28815 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x165a815)
#13 0x00007f5131d26669 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x1658669)
#14 0x00007f513189b42e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0x11cd42e)
#15 0x00007f5131653350 llvm::FPPassManager::runOnFunction(llvm::Function&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xf85350)
#16 0x00007f513165a943 llvm::FPPassManager::runOnModule(llvm::Module&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xf8c943)
#17 0x00007f5131653ef6 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/lib/x86_64-linux-gnu/libLLVM-14.so.1+0xf85ef6)
#18 0x0000000000410078 main (/usr/lib/llvm-14/bin/llc+0x410078)
#19 0x00007f5130191083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#20 0x000000000040afde _start (/usr/lib/llvm-14/bin/llc+0x40afde)
[1]    3539452 abort      llc-14 --march=aarch64 output/main.opt.bc
```

Here is buggy IR:
```
; ModuleID = 'output/main.bc'
source_filename = "tests/main.c"
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64"

@.str = private unnamed_addr constant [3 x i8] c"%p\00", align 1

; Function Attrs: noinline nounwind optnone uwtable
define void @foobar(void (...)* noundef %f) #0 {
  %ptrtoint = ptrtoint void (...)* %f to i64
  %signed_ptr = call i64 @llvm.ptrauth.sign(i64 %ptrtoint, i32 0, i64 0)
  %inttoptr = inttoptr i64 %signed_ptr to void (...)*
  br label %entry

entry:                                            ; preds = %0
  %f.addr = alloca void (...)*, align 8
  %tmp = alloca void (...)*, align 8
  %ptrtoint1 = ptrtoint void (...)* %inttoptr to i64
  %signed_ptr2 = call i64 @llvm.ptrauth.sign(i64 %ptrtoint1, i32 0, i64 0)
  %inttoptr3 = inttoptr i64 %signed_ptr2 to void (...)*
  store void (...)* %inttoptr3, void (...)** %f.addr, align 8
  %1 = load void (...)*, void (...)** %f.addr, align 8
  %callee.knr.cast = bitcast void (...)* %1 to void ()*
  %ptrtoint4 = ptrtoint void ()* %callee.knr.cast to i64
  %signed_ptr5 = call i64 @llvm.ptrauth.auth(i64 %ptrtoint4, i32 0, i64 0)
  %inttoptr6 = inttoptr i64 %signed_ptr5 to void ()*
  call void %inttoptr6()
  %signed_ptr7 = call i64 @llvm.ptrauth.sign(i64 0, i32 0, i64 0)
  %inttoptr8 = inttoptr i64 %signed_ptr7 to void (...)*
  store void (...)* %inttoptr8, void (...)** %tmp, align 8
  %call = call i32 (i8*, ...) @__isoc99_scanf(i8* noundef getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), void (...)** noundef %tmp)
  %2 = load void (...)*, void (...)** %tmp, align 8
  %ptrtoint9 = ptrtoint void (...)* %2 to i64
  %signed_ptr10 = call i64 @llvm.ptrauth.sign(i64 %ptrtoint9, i32 0, i64 0)
  %inttoptr11 = inttoptr i64 %signed_ptr10 to void (...)*
  store void (...)* %inttoptr11, void (...)** %f.addr, align 8
  ret void
}

declare i32 @__isoc99_scanf(i8* noundef, ...) #1

; Function Attrs: nounwind readnone
declare i64 @llvm.ptrauth.sign(i64, i32 immarg, i64) #2

; Function Attrs: nounwind readnone
declare i64 @llvm.ptrauth.auth(i64, i32 immarg, i64) #2

attributes #0 = { noinline nounwind optnone uwtable "frame-pointer"="non-leaf" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+mte,+neon,+pauth,+v8.5a" }
attributes #1 = { "frame-pointer"="non-leaf" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+mte,+neon,+pauth,+v8.5a" }
attributes #2 = { nounwind readnone }

!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7}
!llvm.ident = !{!8}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 1, !"branch-target-enforcement", i32 0}
!2 = !{i32 1, !"sign-return-address", i32 0}
!3 = !{i32 1, !"sign-return-address-all", i32 0}
!4 = !{i32 1, !"sign-return-address-with-bkey", i32 0}
!5 = !{i32 7, !"PIC Level", i32 2}
!6 = !{i32 7, !"uwtable", i32 1}
!7 = !{i32 7, !"frame-pointer", i32 1}
!8 = !{!"clang version 14.0.0"}
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdWUtv4zgS_jXOhZAgUu-DD04ymQm2e6fRWeweDUqibG7LlEBRcdK_fqso2ZYcO3HcM5c1DD3IYtVXD5JVVFYXr_NHYvQrMTXZamkEUWJLGt62pGulWpFZ5MG_qp43bmM078zaxUvfTLgqiDSkFWLTkm2tf5CtqCoiFakbM2N3JOsM2a6FInspua6BeV5vGlkJYtaCaNF2lSGP38lWmjX58uUORwLblVBCcyNaS5Zr3q7dmXc_8xb99Q-hBZFD78AQ7htANfMXe-i5QwPiOBuu8_XMv-d4jwJSd6bpAOTDhkvlAl43y0dqrQfmOa-q1vD8B7AchFsi_NvXJ-wkRbdp9hSeS-zvm65Xmm8I16tuI5RpEdbnAFl-dOD3vVMKnWL9M2PxQ6dyI2tFvmHDV674SmhoJ9C0qYsO7AFvJ_myeDAlO8N7sehRParW6K4X8yQqYZ8GGeVOPrzPAq-s64yj_J4ztPoe8V48-MVlSH0a0tSnlGA0oa38Rfva9g_ftFTGWvJfmudixpIDkebbZQ0gBN_MWGRjQ4E6KfBPQKtKZnB9SaJlFDiVVN2Ls1Jd3_Hly7-_grHdtnbpjN16LyLIAAEMPkCkRxBjLxSnIIKBnuRK8eoPCI9K6NaKvxJFCkImKNixoZIgu1JBGDlh7Y9Ze1FWBswjyyVMO1NrsdTmAjmNWYP9C5TjWTk0AC4TMcFEDM3gMSOayxaD8CHrZFXAfQXMcufp5-PP-Hb_ylwf0D-01rzw4Lr49toWogErQ5TLl77h2aIBZHC3rN0cPBNSuNADknCKJCmTMCU8q62mlyExRW8NO8oKSVDIKLKjicOCMGBlco3DiiSCkRNLxhPWhU9Lj17DmkaRD0MnvJNj3j5PRtG-n-H3i98f4WXcelcX4g6WV5z-o-n5dP9P6JixBc7MTqETRUHyNdewGMPicdxz_eRFfQDuRJ90rA84u4z9q2zFUpj5_sFWuDBMF6-CpWVZfmir-3q0Yo4WzGvXChqFGcidAKPHwKI8-BAYuu93oRaq-G0jDXT9GiYQOcHEjjAlCQ0vDKxFVd3yVua3VZ3_aCfBtd_hhlCKrkfMAdAEsX-EOIqi9EPEulN_qq88X0slduAmiN_0_QLkBBBNIE_WWJqkWcDGe9WRbMwKRqhPwv0LcNK8ABgTnJMVGBTx_dAb4Xz4htB2-crfjhDWf5A_ARgdAeRp4F8A8KtNqqb-HpquB5eD7Am4-Nh6ooxG4Cqx4vnrkDcdYD5umkOM_sUQQ0AwgbjbRvpfQAFsQjC_HPh3rd5LQSDAD7deqex7btn2oyZs0-nOnVIv8SFVwa15CUm4NstBxkW7eN52u2Sif7Sdlo_d0v2A4XUvnnlTrTxeFoL0gj-jlx130Cu8pbPwHnNsP_TTIGRDLmJ_V1QDR_XHtBbKutXqFWqpc9XKzL8lfTw83hMQ97ZAsMVBT9zWnc7FsoTCSvGNGOgZVGSm3ZEDNeupwUwrYUjBDa_4KzDd0QsHA1E4MsE8Ck3OHEkjTNqi4S0K4AFCUVKGBHB1lM_6tidsOxJitGyqPaDBZnui4Rp4LuzElqjR8hkqSchCUJFiyYtiSE-4ApzhrU9eCOADP1mFWNjMwjvPs893hFeQuxA64Q6G3O9OC2O0Le5ULRVMJyij605tJdSR4DlVQ0O3NTyDWWgHF6JEoudaFmRUOCV9A0tcDFpY-heWD1BDY1j20xdqqhnEep8BYTvU5QbE9ubev7xlhSywAkdjH0b3WdmyGQyF5S5SIKxJ1Y90wM52HWTaagyLF_sAfaOaAOmAxNQ73vuXgclINMB6A3jHJtOk4pmocAgU0fp17Ia-ASz_iR-6rtGiaIf4Cb0R4tK1sYE9YIo65yeA7SMiGQ00m-aKUTtD0gu8t7ffO05k13iRXupG_wM_sncdaevN91XzEcAJ0y0Orjltx95-Vc2L05a_hidaUQj3h9Juztt-fmXS2OeTWtCx-lPdR9YOTrv6wOZY7jvuDt93tz2qe-Pu4FJ3Rx-4Ozyvr4U0dB34DWSnNIkvDlzvUvjJB_DjX43W5L3IgvXgfFiNlAVFULFkCNSeDeq_XMq2ztN02eZclTua_Y4A2yBUKHisaJVTGba31hOj7QxZTt8XZNgYR9YbmfGcRqONyGo2Nji7cvKdNdEuUtMLVkX23vyAGv6K9TC9NMIo_SDEQP4vxhilVy1fWvTmGvbK-H68aRYirzjmixh7HwXaOCghRb8kBxpSHzwxxNznSOi7bthZXm4gIV4N5h9ks79F9mGNvFg2B3Ey6_DLRJ-PYRoR336c_WGyWmrIQJ0G4wwP6yHJhUnJgMqpBAdr43LANhJfV7xynkUOQeJsZYEwB2pvIFO1A1o0jVQrKCBGBEZ3YqCxHy-cRtem55R1ZSm008qfYk-eDLR9du3kTbfvsh9hZD4lKAU3nRbtngoKn40BfnfwoAQW6_jU9LbFx-fEDbllsgvFqRHp3oiXmuj_R3c2CqCj8CVHM3fGqA3e_uuOW1Z8tctiKVYFjNolC-50uLPh7g_3YLiHwz0a7vFB0iBDFkKZKfPkLRxvRIGTZycX9N3iIfByZ-xhcgVjOfT84Exzla-dwehClTWUorjbjXh5Y17sPC9cXhxYETutHFwvRdue4-J_iosD-8o5TsHnOOG3Tyf7IV7P8QuP-MUHft8e78gX8SzGWNh4bHR-7K4uPYyk45Hx-ZFvZump8ck0gIAMVmK1Is9Ct7hy08D1XFtm7wdNDyxuxBzP_WkYszi-KeZ-kfopvzHSVGKOR1Xkt-_f_8TzDnLHlarxazQe3GIDINNStTLHrfLNon_T6Wq-Nqaxh6TsAY-PwAld5ub1Zjjf2R3zwBLyX2TKHmTbdjj5H8I49sOb9dz3s9jjiQjKMKZhkqZpHkUijeMiYJkIixtbvLZzyMIg_7qRc-bBAp7SgDIvDmO3yGAkD3IvKZKU-vghVWy4rFwLuNarGz23GLJu1eLmJVvTHjp5a7MNseOPmtV6freu__Ha_adWNxbw3KL9HwxsC08">