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

    <tr>
        <th>Summary</th>
        <td>
            [X86][ISel] Assertion `(LZ + TZ) < Known.getBitWidth() && "Illegal shifted mask"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    Reproducer: https://godbolt.org/z/5TGro7zbM
```
; bin/llc test.ll -o -
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define i8 @main(i1 %tobool180.not.i150.i) {
entry:
  %spec.select = select i1 %tobool180.not.i150.i, i8 0, i8 1
  %conv673.i.1.i = xor i8 %spec.select, -1
  %0 = udiv i8 1, %conv673.i.1.i
  %1 = tail call i8 @llvm.ctpop.i8(i8 %0)
  ret i8 %1
}
```
```
llc: /root/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp:31722: llvm::SDValue LowerCTPOP(llvm::SDValue, const llvm::X86Subtarget&, llvm::SelectionDAG&): Assertion `(LZ + TZ) < Known.getBitWidth() && "Illegal shifted mask"' failed.
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-assertions-trunk/bin/llc -o /app/output.s -filetype=obj <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@main'
 #0 0x0000000003b243a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3b243a8)
 #1 0x0000000003b21aec SignalHandler(int) Signals.cpp:0:0
 #2 0x0000793749242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x00007937492969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x0000793749242476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x00007937492287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x000079374922871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #7 0x0000793749239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #8 0x0000000001f709ff LowerCTPOP(llvm::SDValue, llvm::X86Subtarget const&, llvm::SelectionDAG&) X86ISelLowering.cpp:0:0
 #9 0x00000000020a8d11 llvm::X86TargetLowering::LowerOperation(llvm::SDValue, llvm::SelectionDAG&) const (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x20a8d11)
#10 0x00000000037c4a38 (anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*) (.part.0) LegalizeDAG.cpp:0:0
#11 0x00000000037c8113 llvm::SelectionDAG::Legalize() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x37c8113)
#12 0x00000000038ddc47 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x38ddc47)
#13 0x00000000038e0e92 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x38e0e92)
#14 0x00000000038e21b0 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x38e21b0)
#15 0x00000000038d2eef llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x38d2eef)
#16 0x0000000002abe549 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#17 0x00000000030b1f20 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x30b1f20)
#18 0x00000000030b22d1 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x30b22d1)
#19 0x00000000030b2b87 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x30b2b87)
#20 0x000000000085cb7c compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#21 0x000000000074ad56 main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x74ad56)
#22 0x0000793749229d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#23 0x0000793749229e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#24 0x0000000000853b4e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x853b4e)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
```
 // Compute the lower/upper bounds of the active bits of the value,
    // allowing us to shift the active bits down if necessary to fit into the
 // special cases below.
    KnownBits Known = DAG.computeKnownBits(Op);
    unsigned LZ = Known.countMinLeadingZeros();
    unsigned TZ = Known.countMinTrailingZeros();
    assert((LZ + TZ) < Known.getBitWidth() && "Illegal shifted mask");
    unsigned ActiveBits = Known.getBitWidth() - LZ;
    unsigned ShiftedActiveBits = Known.getBitWidth() - (LZ + TZ);
```
`LZ + TZ == 2 * BW` when the operand is known to be zero.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWF9v46oS_zT0BdmyseM_D3lwmqZ3ddu71Wm1Z7UvFQaScErAAtx_n_4K7KQhze6290ZHZ7V1bGB-85thGGCwMXwlGZuCyQxM5me4t2ulp9SS59eXp7NW0ZfpH6zTivaEaZA1cG1tZ0DWALQAaLFStFXCxkqvAFq8ArSY3F1qVb621yCZg6QBRTL-Hz6zGWy5BGghBIGWGRsLASMFo6HfYr1iFlJsscAvqrcQZHMIEGLRBmQNizpUJiBrMuQf7jMNP91bkftHxHcvKapA1qSoipZVMr5J31RsxYs8unXDEAqoWM07wbY0nqvivsijXj5I9SQjwWX_HK1kv5ManpQtuWSQVxDkyQY7gyueQoAmVrVKibRKYqlszNNJEnOAagjK2SDKpNUvzr_-CzoZ0zESGyYYGdwxvv4K8NzpTsbfdA-LKPlYlFnM4zTmHu1ZaU800OMko325xI_tKX8cENH5O7S90akfbTEXkGAhRkcI8biJie1UF_PKecRrTQCqt6Ka2ZHLqBuU8-NxFH4KQVxsArTQSlkfXY-bqNPqL2-L_3Q_vAVocecnFqDF96oYnl9umbhST0xzuYpJ17mQSEvkogJ60awBWXM7_4ZFz6AfeX538_UGoOpdt_MMUdLYPcnvVXHbt3bUW7ghe3Le4VzJeXPpO2untjGGadcKnZGouvoBAZrBux8-WLJz-G8XgPGK2Rm3f3Jq18DFbg09ROFi9YsQbIUFNGu-tIzCDTYPLk5RCZeYC0bjwXk3VxfN7QU0fbvhFmLY9iuoWae0hVYdrndu130bE7XZ82roa25MzwxAC4glhVwS0VMG7ZpBorFZwxaTB6sxYaP6W4vJA6T9pttFfRKDpL7RaqXxBmK96jdMWjPOsOqcFqI2HRdMR-y5E0oz7doElqsIbz1nIqt7-QDQ4i3jRMpB4K5zQL3tehsbGC25YPalYyCbq_Yv516jek0YyC4GQqkj9EcvJZcr2GFjIEDlopd-3uCNa7jGEq8cjRIqCTeK9i5roDIAQ-VoNDoG-L0q4Ly5jEB2MW8u4RdprO4HFbsgGfGXW91OwzbFlOMyAihLYPKcbP9lLcozXO3FnHkxw8uN5tL6GbhzUxIEtMZP98pYzfBmDFou7RBi1f85DwDNkueR1tvyByhLD3inmBF4y1cSi39hSYXDr0YaQ7MZF2zi_3ZAaAQq66zMa5SjCUpG4kMWGDP5XgZ3HSQ2Ki48PS8SkMtCzLqolwR2dq0ZpvcPXIjPKfDygYL8kHReFnBlvJ2fJZ-XRYA9CbFRVS4ziFu3yj-F7AUD5OIdctp-GjNtA8wyxMxqVhefw_QiAWa1H1vpskzq5fIDyfx4Gh9y_AeSOTy-vxyEa73PDSW4omkaah52rS3K0Oy_vnZM4yE1_M6AI-yGrepEK3okvvO6W9BhJipJjjO3wVdYKvmyUb2BEm-Y6Xz2qd_zvHJ7GH9lo8Xj19fuwNr_KMoAasb0FHdY29itXriVmDeX713vCKYHBKs0zX7ms4DDbsM9TTYcNAe-QwG1ilKSlz-h5kJsaD1XlF0y2Uh6seHWz_RJeQ40Ap5ZyJMlrEa_5Tm0NkLMsOFkJhR5MMGk7vbXt6V2Qis8ycCK_MAKlLbJb63QvfwqrzFZc8m2hAMr3vWd2AzHMjBjchA0iLHlL8xw0Uxe_hnGeK6BMUWQF3HLJnkNf8rHHcT2LDlqwnvue8niCN7xpFEGTk7adIn2Y2Vx40S3R8JPMzqJNwdSgTerA9YI0fQDrK_9YTYMhLHpxIwdoYBxfci4rfYzoNgL3j3uXzbd2_L8W3i3VZARUbDrJdWEtCWBo46dO8kaa79nNeE2fXX17fpcScuet1lPCHI0DlGweSVljumkgO42cCrjBsjAtoOjNapp_cmjtRcJMLNDTJYn8P7eid0bi7W93zPqw1pYHmrJD2Yla3MGB_xT-WsA3WndXmIt0xsusbuGP3G7hsOZ3t1ob79c3l5cfhuGn4-KoWa215JRNyLN6o_UQOBwQ4cOo7fDjVu4AyJAi77rmIat6iU1UC19HyaWPzLYcrtrehyPjNtyDNxiYiHUk7uq9gZaNVQU3oFQ9SQhX0LJCDMG6xc3dMmtuzYqNzrkaTpGOBaQYMMMbJlQT_GbYl_emDlY_-brSf4IN1i36waocmfBGmSzN-Fe-qomhVc_vOBQKyGql_aayyuGKZerH0wrM5yNjgvfHRO-05iLX0gPAeI7Tlqz-QnHxvvf--mN63sFEbz6cRzgdlD0YZwDs3ag72NzN8whOlAEAWrg7E9QJPBpzaQPIOVuL5JCbqAvqbqYaRl8ZVqN0XBGpxmtsxqfsWlaoiIrqgSlZ-spoW2Oa8QyUiyXSUKLFLc5ZaiiWZqyLD_jU5SgPKnTiftBaVxQVKCyyvNJkpUVaUGesA3mIvaVSaVXZ754NU2TqkTVmcAtE8aXxhFqMXlgkg6XMT8l5wAhX9KKlIweseDUNU_mZ3rqS2JtvzIgTwQ31rxpsNwKX253MJM5mMz8YXIy_3tKfme9FtP_vaY3euZxiv4bAAD__1KuLHc">