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

    <tr>
        <th>Summary</th>
        <td>
            [PowerPC] SIGILL in `PPCTargetLowering` for `powerpc-unknown-linux-gnu` with pwr9 target feature
        </td>
    </tr>

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

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

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

<pre>
    I don't know whether 32-bit ppc with power9 is actually valid, but it shouldn't sigill in any case.

The reproduction comes from Rust:

```rust
#![feature(f128)]

#[no_mangle]
pub fn entry(a: u128) -> f128 {
    f128::from_bits(a)
}
```

Invocation:

```
$ rustc transmute-lib.rs --target powerpc-unknown-linux-gnu -C linker=powerpc-linux-gnu-gcc -Ctarget-cpu=pwr9 -o transmute.rs.ppc.pwr9 --crate-type=lib
Illegal instruction
$ rustc -Vv
rustc 1.80.0-nightly (9c9b56879 2024-05-05)
binary: rustc
commit-hash: 9c9b568792ef20d8459c745345dd3e79b7c7fa8c
commit-date: 2024-05-05
host: x86_64-unknown-linux-gnu
release: 1.80.0-nightly
LLVM version: 18.1.4
```

IR:

```llvm
; ModuleID = 'transmute_lib.1e179323af95c5c5-cgu.0'
source_filename = "transmute_lib.1e179323af95c5c5-cgu.0"
target datalayout = "E-m:e-p:32:32-Fn32-i64:64-n32"
target triple = "powerpc-unknown-linux-gnu"

; core::f128::<impl f128>::from_bits
; Function Attrs: inlinehint uwtable
define internal fp128 @"_ZN4core4f12822_$LT$impl$u20$f128$GT$9from_bits17hd411f033365ec7b5E"(i128 %v) unnamed_addr #0 {
start:
  %_0 = bitcast i128 %v to fp128
  ret fp128 %_0
}

; Function Attrs: uwtable
define fp128 @entry(i128 %a) unnamed_addr #1 {
start:
; call core::f128::<impl f128>::from_bits
  %_0 = call fp128 @"_ZN4core4f12822_$LT$impl$u20$f128$GT$9from_bits17hd411f033365ec7b5E"(i128 %a)
  ret fp128 %_0
}

attributes #0 = { inlinehint uwtable "probe-stack"="inline-asm" "target-cpu"="pwr9" }
attributes #1 = { uwtable "probe-stack"="inline-asm" "target-cpu"="pwr9" }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 8, !"PIC Level", i32 2}
!1 = !{!"rustc version 1.80.0-nightly (9c9b56879 2024-05-05)"}
```

Backtrace from GDB:

```
#0  0x00007fffeee2a599 in llvm::PPCTargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const ()                                                                                                       ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                                                                                      ││#1  0x00007ffff0227d99 in llvm::TargetLowering::LowerOperationWrapper(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&, llvm::SelectionDAG&) const ()                                                            ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                                                                                      ││#2  0x00007ffff0c68ac0 in llvm::DAGTypeLegalizer::ExpandIntegerOperand(llvm::SDNode*, unsigned int) [clone .cold] ()                                                                                                 ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                                                                                      ││#3  0x00007ffff0389b36 in llvm::DAGTypeLegalizer::run() [clone .warm] () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                ││#4  0x00007fffefb71b09 in llvm::SelectionDAGISel::CodeGenAndEmitDAG() () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                ││#5  0x00007fffefbd92c2 in llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) ()                                                                                                                     ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                                                                                      ││#6  0x00007fffefb167ea in llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) ()                                                                                                                    ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                                                                                      ││#7  0x00007fffeede2b1e in (anonymous namespace)::PPCDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) ()                                                                                                    ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly                                                                                      ││#8  0x00007fffefb0ee14 in llvm::FPPassManager::runOnFunction(llvm::Function&) () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly        ││#9  0x00007fffefb0e285 in llvm::FPPassManager::runOnModule(llvm::Module&) () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly            ││#10 0x00007ffff0074ca0 in llvm::legacy::PassManagerImpl::run(llvm::Module&) () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM.so.18.1-rust-1.80.0-nightly          ││#11 0x00007ffff6b58d10 in LLVMRustWriteOutputFile () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-c823c964cb628bbb.so                                           ││#12 0x00007ffff6b58928 in rustc_codegen_llvm::back::write::write_output_file () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-c823c964cb628bbb.so                ││#13 0x00007ffff6b565af in rustc_codegen_llvm::back::write::codegen () from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-c823c964cb628bbb.so                          ││#14 0x00007ffff6b56285 in rustc_codegen_ssa::back::write::finish_intra_module_work::<rustc_codegen_llvm::LlvmCodegenBackend> ()                                                                                      ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-c823c964cb628bbb.so                                                                                             ││#15 0x00007ffff6b59377 in std::sys_common::backtrace::__rust_begin_short_backtrace::<<rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::spawn_named_thread<rustc_co││degen_ssa::back::write::spawn_work<rustc_codegen_llvm::LlvmCodegenBackend>::{closure#0}, ()>::{closure#0}, ()> ()                                                                                                    ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-c823c964cb628bbb.so                                                                                             ││#16 0x00007ffff6b58e5b in <<std::thread::Builder>::spawn_unchecked_<<rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::spawn_named_thread<rustc_codegen_ssa::back::││write::spawn_work<rustc_codegen_llvm::LlvmCodegenBackend>::{closure#0}, ()>::{closure#0}, ()>::{closure#2} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} ()                                        ││   from /home/tmgross/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-c823c964cb628bbb.so                                                                                             ││#17 0x00007ffff19997bb in alloc::boxed::{impl#48}::call_once<(), dyn core::ops::function::FnOnce<(), Output=()>, alloc::alloc::Global> () at library/alloc/src/boxed.rs:2022                                         ││#18 alloc::boxed::{impl#48}::call_once<(), alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output=()>, alloc::alloc::Global>, alloc::alloc::Global> () at library/alloc/src/boxed.rs:2022                      ││#19 std::sys::pal::unix::thread::{impl#2}::new::thread_start () at library/std/src/sys/pal/unix/thread.rs:108
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWltvIym3_TXkBZVVBXV9yIMvcRQp_XU00-qRzotFUdjmBEMJqDg-v_4IKN8qTnf6m5lMWtOjUbrMZcNea-0NVEGM4SvJ2DXIJiCbXZHOrpW-tiutjMHZVa2a3fUdbJQEqLDwUaot3K6ZXTMNMYpqbmHbUrjldg1btWW6gtxAQm1HhNjBJyJ4A9AU1p2F3EKzVp1ogi3DV1wIyCUkcgcpMWwE4hmIx-HvlzWDmrVaNR21XElI1YYZuNRqA3_rjAV4fNoc5HH4X7u6UIQwQAnIJktGbKcZQOUyQSVAFchmZ30RBtlEqsWGyJVgh9q2q-FSQiat3gFUEoDHsAsWYATwDXTmICgmoTmE0Je4meGxm-ii5tb4nqjqhypmg_meTuROPilKnLevebefcAqdnxRaTaTZdJZFgtcjbWAUWaJXzAY2Whp10pEmI8Fl9xytZAejKRRcPjIN8Gzf6lAbrSiF0TQYiWjbuUZbXcFIHQcbaTNqWzoKFRHVxLLI7loG8EzwundGCLYijmBjdeBwOPvo61MoCj-TURmP4kjy1dqKHQSorGhVZ3lZVBDFKI3iLIqzA5Y1l0TvHCm-eyikarPhNloTs3Y1BwOILVHclGlW0SLNcJo1DWZFVRe0WJLyvHNDLHOdT8b01WvlZQefy3yRpy-R7X1hghHjDZw7FKrv779-gk9Mm8AyTMpRMkq_JYrfXhODEE-bvghP4CfVdILdzSDAM-gibM_WwkkjYUlRYYTJsspoRrOIrrpRDFARDBjVacoWSy6YJBvW20Bvs4GCjV54DbFEkJ3q7N7KTbQBeMyiFuAxRv5PNJcYRTxPAR7naSQxGpqxmrfiMJFX1XzodgSCKs36GDxEI8BTvmlFH583wxA99J13MmSbsbXaOH64FFyyNZcWdltLasFC64YtuWSQS8u0JAIuW58MUofH4n_-k7pZpG44hBYApfdfAErdFABKOxQDlIZclN66iuowlaRYN2mSLGOMcZ4xWtTZjfMRldzbR9mTSz-ddDQ1C9I0GgKE42MaMpboY3aErssi9jjW3FJiLDxYglaFee_bamb3jrhew5z1DZguYXOAZJ9B9wOTSy4kr7ngOSVC_NfEnmLgDb0bV8fE_zZsibWa151lpifVqb-YXBChDwqtahYZS-ijGxbPAEKhZUTMBiDkQ_iYyfdtXNr2tfvBz4dNDsP-HWPt14DEZa_Rxiet0VKQleljPXEyQEl87NG35Q2T9rxR8tJsfNKCYwRLt_1wPxF6uJvCe_bEhCdpCl01Oh0mObcOEAoLU5-uf2CBQujbK_2E0EerCWVhQ3M7m3xvxccxhPFzHMdxsVwuGWOIZFXltk9-GfC6f3iYfvEU3Lt0yeUqFPtfn1umw9YClccev8--EtExh8ZJIRPMh_dsfAtQ7oKVKmmsc9j9eJ__wA0CVQpKdHhw-yuHFkDztdowgOZ24zeqAM1HjqmudWVKCbomXLrinqro1SUbzWsuXf8RQHO3dzl7FLx26_XIqJFbpyM3SDRQwTs57wPzRAHLGKGiGSrg-_T_oUnbMj1QwX9UwwAaD3SwIUJ8ZdQqfeeyIZ6-FA6-8Qp5J_n80sRQE-hcEzQvCY3PNTEb337Zteze7cb5_7ltvyu9eW6JbO6kZateHbJ5XRSd9OfExu13HIcgm1ChJIMjqkQDstl75YZfChgqAJ8rAJdVjfO3KEB3siftyOaW6M0Jmx8f2IuQpGdL5bIukjoeJMrTJHX3OxOhdKoadsvkWDY3G259_goA_dRwZAM4mgpR9BY4QulYiAkxnE6Eoo_mLEcczgE-wffJ_l13Cd9z_9-eHfIB90leMPIW7nUnP8tPhK65ZHuaz7h_UfcPk_-L-yH3xfmJoWGoTpjjHqCSSCV3G9UZ6E7hpiWUuXPL_hjhVgz1c-nhF_9D_stB7MeMJel57M8fHogxn4gkq5NtwWd5keHL1H5ciC-CUr0ABZXZ20AJb1jPRd8X_RyAvApKEp_tIeMipWRwihBsReiuTxBHeMLB8Lid_HmhuQxMcgpMXmdlk3hgnN3fOmP_0Nyyz51tOzvn_lXZuzkqeO1fTy0azZ-YjmiJMK3ylNY5Kuu6Hhn1ZzNIgobuV6h07oeBqWrYisnFkfSa0MfwtHXAnDwulAfJf2L44ChdhgIPoMgzsvxhKPpmHxyA70GRDqHoU-g5FMaQbyCx5JKb9YJLq8kivAZebJV-PLzWfw3Xe_G0mYbSCaGPTDYA3_yt-4x_bGfx10b4X-G4Yz8bsF_honDsG9sEhszOLKjabMJn7MC_f9kdfi4WzqlFzVZcLsxaabsYtAB4-kMCgMS8pj2rCbfmOA8vl_D-y2rS9__E7Fo15vD9yLRkKxfh85Rda0aak-m8BOUtcg8mg8B_TNo9JMWECmX8NQbsv434zxr-NsPb2vwbtuIfM2Dy4SLKstofw7zMD2GzV5p7nnRcNG7zeabITtI1o4-sWXzoCHk1Hl7C86Ei5EIbBIqZw-746Vm1PVbL_WkonBnkZ-nS1_TEWm-QEiEWSh6SWzExa-78eQqfzMNMfjA8f4XYWYgVpyGWVFVV1D7EiBCK9jJUz6w5UBA-7-O0dCIY0rQnEU1hs5M_Tj6awnAk8N_A93pA09PpnDzeClUTcZKiiYUOZqJ3AM1DQzQ32v31Xoz8nQsUI_QnYSv_PECXDUzUM8DTdwXvHfG9DGZ1tgMKDy3pT8ed5M8v0_wRZ3SAWbLtacOFvwxzceZuuP283Yho7oZDcz8Wmof-wZckLgf3Cq6aa9xUuCJX7DopkqzI8wTnV-vrIsFFkteYMYxxE2eElDGqqpiShDZFmVzxaxSjNM6SLK5SlOQjWuespLRBKSqKtMQgjdmGcDHy1zaUXl1xYzp2XSGE8ZUgNRPGXzhFSLIt9JUAIZDNrvS16xPV3cqANBbcWHO0YrkV_qbqg9oy_TAF2Qz-fnd7d3_vV9M8fnn_IY_hUmlX9_oNsjzu769udQX722f9ldGrTovrtbVBuWgO0HzF7bqrR1RtXDJ0C1P4J2q1-l9GLUBz75Cjwzv8_wEAAP__Rj0BtQ">