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

    <tr>
        <th>Summary</th>
        <td>
            [SelectionDAG] PPC out-of-bound access when compiling i128 vectors
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:PowerPC,
            llvm:codegen
      </td>
    </tr>

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

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

<pre>
    When compiling the following code using ppc: https://godbolt.org/z/WP7PnjYbW
There will be an out of bound access in debug build, crash on release build.

```
define void  @f(i128 %V, i8 %Idx, <2 x i128> %L, <2 x i128>* %G) {
BB:
  %B1 = and i8 %Idx, -128
  %I = insertelement <2 x i128> <i128 42, i128 42>, i128 %V, i8 %B1
  %B2 = ashr <2 x i128> %L, %I
  store <2 x i128> %B2, <2 x i128>* %G, align 32
  ret void
}
```

Here is a stack trace on debug build, it seems some place has a mis calculated index.

```
llc: /home/peter/aflplusplus-isel/llvm-fix/llvm/include/llvm/ADT/SmallVector.h:298: llvm::SmallVectorTemplateCommon::const_reference llvm::SmallVectorTemplateCommon<(anonymous namespace)::BitPermutationSelector::ValueBit>::operator[](llvm::SmallVectorTemplateCommon::size_type) const [T = (anonymous namespace)::BitPermutationSelector::ValueBit]: Assertion `idx < size()' failed.
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=ppc32 crash/ppc32/1/function-pass-manager/tracedepth_0__hash_0x4fa9d65e2cba1c7b/id:000776,sig:11,src:009157+009628,time:182458797,execs:9381044,op:libAFLCustomIRMutator.so,pos:0.bc
1. Running pass 'Function Pass Manager' on module 'crash/ppc32/1/function-pass-manager/tracedepth_0__hash_0x4fa9d65e2cba1c7b/id:000776,sig:11,src:009157+009628,time:182458797,execs:9381044,op:libAFLCustomIRMutator.so,pos:0.bc'.
2. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@f'
 #0 0x00007f9662a0c4ba llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Unix/Signals.inc:567:11
 #1 0x00007f9662a0c66b PrintStackTraceSignalHandler(void*) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Unix/Signals.inc:641:1
 #2 0x00007f9662a0acc6 llvm::sys::RunSignalHandlers() /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Signals.cpp:104:5
 #3 0x00007f9662a0cd95 SignalHandler(int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Support/Unix/Signals.inc:412:1
 #4 0x00007f96611ca980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007f96604c6e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007f96604c87f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00007f96604b83fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #8 0x00007f96604b8472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #9 0x00007f9671249419 llvm::SmallVectorTemplateCommon<(anonymous namespace)::BitPermutationSelector::ValueBit, void>::operator[](unsigned long) const /home/peter/aflplusplus-isel/llvm-fix/llvm/include/llvm/ADT/SmallVector.h:0:5
#10 0x00007f96712475fa (anonymous namespace)::BitPermutationSelector::getValueBits(llvm::SDValue, unsigned int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1507:21
#11 0x00007f967124794f (anonymous namespace)::BitPermutationSelector::getValueBits(llvm::SDValue, unsigned int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1542:30
#12 0x00007f967124794f (anonymous namespace)::BitPermutationSelector::getValueBits(llvm::SDValue, unsigned int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1542:30
#13 0x00007f967124794f (anonymous namespace)::BitPermutationSelector::getValueBits(llvm::SDValue, unsigned int) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:1542:30
#14 0x00007f967124600c (anonymous namespace)::BitPermutationSelector::Select(llvm::SDNode*) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:2674:9
#15 0x00007f967123d2a6 (anonymous namespace)::PPCDAGToDAGISel::tryBitPermutation(llvm::SDNode*) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:3938:17
#16 0x00007f96712275b4 (anonymous namespace)::PPCDAGToDAGISel::Select(llvm::SDNode*) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:5037:7
#17 0x00007f9663207139 llvm::SelectionDAGISel::DoInstructionSelection() /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1166:5
#18 0x00007f966320618a llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:937:3
#19 0x00007f9663204b5d 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
#20 0x00007f96632045fb llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1604:11
#21 0x00007f9663201ba6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:468:3
#22 0x00007f96712271a9 (anonymous namespace)::PPCDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp:167:7
#23 0x00007f966619ac35 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/CodeGen/MachineFunctionPass.cpp:91:8
#24 0x00007f96653529e6 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1430:23
#25 0x00007f9665357812 llvm::FPPassManager::runOnModule(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1476:16
#26 0x00007f96653532b9 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1545:23
#27 0x00007f9665352e2d llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:535:16
#28 0x00007f9665357af1 llvm::legacy::PassManager::run(llvm::Module&) /home/peter/aflplusplus-isel/llvm-fix/llvm/lib/IR/LegacyPassManager.cpp:1672:3
#29 0x00000000004199ac compileModule(char**, llvm::LLVMContext&) /home/peter/aflplusplus-isel/llvm-fix/llvm/tools/llc/llc.cpp:736:41
#30 0x0000000000417d52 main /home/peter/aflplusplus-isel/llvm-fix/llvm/tools/llc/llc.cpp:417:13
#31 0x00007f96604a9c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#32 0x000000000041755a _start (./bin/llc+0x41755a)
Aborted
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl1v27jS_jXMDWFDGurzIhf-qLt50b7HaHK6OOfGoCja5pYiBZJqnP31B6Ts2FKzm6Af6WI3aA2JpDjPMzOcGVKi1oqd4vwapXOULq9o5_baXC-powttTNc6Xl9Vun64_nXPFWa6aYUUaofdnuOtllLf-zuma4476y_bliEyw3vnWovIDMEKwWqn60pLN9Vmh2D1O4LVr-t8rX77T_UripYomt3tueH4XkiJK46pwrpzWG9xpTtVY8oYtxYLhWtedTtcdULWCBaYGWr3WCtsuOTU8r5n2s95_M2i479wW_OtUBx_1qLGGCXRFkEhYigwgvSjn1KEy5v64G8QWQA-YD8AkTe-492XzQhmvuctghKjfN7Lmc89-XCJfe88xogsMVX1UMLEz3EedhNGCWW5cVzyhiv3BQiyCIATCHCPlx7G8W7IZB5fooAehd2bP-QG6c3pCeu04U8MnMOfaWGBqRQ7hQmc5jHcBY0fLZIvnzRN__uLdwRhMcXWUfYJO0MZ9yYemV44bDlvLLa64biVftSe-ucaYTGjknWSOl5joWp--DOXkDJ4LILVXjccwarljhsEK7qVreys_z8RlksEKyk_N5OtOBwvEayEYrKr-blhtrxDsLptqJQfOXPaTPeIzKAsvJAwhswQmV0MuONN67EudNNo1XczrazbGL7lhivGX_bgAkFBlVYPje4sVrThtqWMIyj7R-fCrblpOked0OqWyzBL3_eRyo7PhfOmDA265Yb67hAZEBQvxm7F73zjHlovGAciGKXzu-B63wNhuvSqnFm_SIRWGGWRqA_eH7EXjaDw80GOt1RIfgoH63dvZrdvsO2qRjhMsfcmw1ttHHZ6HK-E23fVlOnmbNdg-tbo3zhz3u7WdtwiWPVruveCEBb7oFRR9in47lH8bfDmumvax8AQTXH4Wxu9M7TB1Ow6v-I9DjxFsKqECoIZnjTOiFZyRJZtywj0Qryv-jsEqxjBatsp5hUyaam1k4Yqugt-HGDUvHX7TbTZ7Kndb6JDsqVlnaUcWEVjlleeUo3ILIqiPM8QLKzYITKLY39pWOgp4zRHMI-iMvM6XjjRcD-mgCQt8jJHsOAHzjz-khRxlCQIFtoTlqKard4tOut0c_PhvbevNlOrESxa7cdH04r1Womn-EOnVMgl1FqMIF8dieG1b3h_Ipb7sNDoupPcj_pbqgTyo__Al2pZ63tu1gu8nL2dIPJmOXuL19Q5bhS-UdaZrldav4qEVkeNnXTip-gzYH4M1AhIhKND5AlvyywDGrGkohfBxz7Y_mJthHLBp-9MWMAX4cHQ-422znDaIMhCsFYuZMevC7FSeFPcdq1frAhW_1ah91bsFJV2KpQ3RZrlvW0eqcRjKllW4RHufo5fqKqlx1OELAWzHw02S2IP9owVRlgpY9lTav_QqQFk2we77wX2hJK13kPjKPGKPaMkY43WZYrHKnwFWycxDNWXXAKLY0bLIsKbjeGhgtkYh4OejrMfimyTJRMpVHeY7FTXd7Rubzitp1ZPI7-iDzGUReQzyaOY9FJMlLCMFzk2VFgff1bH0mS1k6Jik8XH_7v_b_V4C1PIEaxs4IFgNfXx3T7Ymrc-iXQ9TftgPwc0qvO3Yepp8G7vL9EZSTZCUuTbGNNKB6YvQ-LqXhvhqSCkGAnJh0Kqgmwp3mxoSLwbn1w3FX059_65x4teZDkUWYxFJjm8wHbMWy0LViNRksPAauXFnHkMSZnE5SvWU7Doa98_rKs6FfZgNZZa7S5Kph9aj0bnle1DZTTSUZ5u6bfUajvuTgqww9JxGdq9Vh55f4-IcUfNjnvnOiZFf7Ve3NxyuZy9vdPL2dtTUEsjnyggPpOPx-TLZPt3Je-3ijMSncnDP5k8-SeTT0bksyhi30K-vxvR_n_tY9G3F1QvJgpZ7quW8swzHfIkNdDsOZ7r9eI0r5fRNzrzMOT_s7mSkhTetvmZbDYkC3laJV9F9q9hzTQiPlpfEBwUJQSiPCaDbH7a7AzILPXFhuhiP_TttfNC1_wt99v0S8mjWw_ktA7jLBum3mJEKIsL-iyho9iZqt80wgWJr8-lDLYhZyrliEpSpfWzVPrWObWCzaVmnwYuJ6SwbiPcsWQii3FXzR0Vx5mUrvlGt16CHQy9ML6PwM70kXhLpeWX9dllWxjUt_3F4FRay7CvfmVzZ6FYP9dNEI3NnW6rF5p7JuXZ4sNU-XjYE8rgn0E0zsLGN76gGo-oxhXNnqVqOvUv9Z6yvVD8xGpA9Yu-1-eaZMVgDQOME0hMy69KID-D_cvLoWyYVmBwtJHFJWUkxX-IdU2tvWD5JL0fY9UngJyisd-9F2dGgzORlKRQ8kuXXa39s6ez1FfkcvMBweod31H2cIHgZJeE-J0pXDhkOuKRFzG8gMf7cC48dLhj0w_nkGfBxc4cshEHAtWzi-r9X49YmqQj4-RjJ-NwmfFlmOkYJM7z3TTtOUj8DCYpSUcWKsZeRrfx80R-Kok4y2EYu0_1V_-XxGVJ2fGdPX90G7anJtTws2Ft8-7dx_cLrRw_fGPSdVpL27-36n-PeHOShbPbR7yPLxtOePM6BdxQob636CQOLwfOqhq-HIgSWrIix5uNFBXbWEeN25xwvORok9nudKbbX4bOME845iRJcj7n9OJhzDxNKe4F-7gwePkXjjX7IY_nmrNKG8frJ99nX9XXpC5JSa_4dZzlUZQkZQ5X--tsWyWMFGQbFzGvkpJDkaewLYqElwmh5EpcQwQQQ0SiFCCNpllc1xUAyRISFSTboiTiDRVy6vU91WZ3FV6DXqclgehK0opLGz4lAago-8RV7dfLKRcDAv97dDmma77zOQ1Qurwy18GaVbezKIl8LW3PQpxwMnyiMqhp0iVerxdYd26it5PBlyL3w49VwmcRn8NRhb3qjLz--re9gen_AgAA___D2s5y">