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

    <tr>
        <th>Summary</th>
        <td>
            [LV] Crash in llvm::DemandedBits::performAnalysis()
        </td>
    </tr>

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

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

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

<pre>
    See also: https://godbolt.org/z/TezabjsPe

This input:

```
char a;
int b, f, g;
extern char c;
short d;
extern short e[];
void h(bool i[][4], int j[][4][24], int k[][4][4]) {
  for (int l;; l += 3) {
    for (signed char m = 0; m < 4; m++)
#pragma clang loop vectorize(enable)
      for (int n(i[g][l] - 1); n < 24U; n += 3) {
        d = e[m] = j[2][g][m] ?: j[1][l][m];
        if (f)
          a += b = i[2][g];
        c += 0 < j[l][m][n] & k[g][3][3];
      }
    for (int o; o; o += 3)
      ;
 for (int p; p; p += 3)
      ;
  }
}
```

Crashes with:

```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -fno-verbose-asm -S -target aarch64-linux-gnu --gcc-toolchain=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu --sysroot=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot -fcolor-diagnostics -fno-crash-diagnostics -std=c++11 -Ofast -mcpu=grace <source>
1.      <eof> parser at end of file
2.      Optimizer
3.      Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "<source>"
4.      Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "_Z1hPA4_bPA4_A24_iPA4_A4_i"
 #0 0x0000000003c90a38 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3c90a38)
 #1 0x0000000003c8e40c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3c8e40c)
 #2 0x0000000003bde738 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f2188e42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x0000000002e55ae3 llvm::DemandedBits::performAnalysis() (.part.0) DemandedBits.cpp:0:0
 #5 0x0000000002e591b5 llvm::DemandedBits::getDemandedBits(llvm::Instruction*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2e591b5)
 #6 0x0000000002e40ff5 llvm::computeMinimumValueSizes(llvm::ArrayRef<llvm::BasicBlock*>, llvm::DemandedBits&, llvm::TargetTransformInfo const*) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x2e40ff5)
 #7 0x000000000572a67f llvm::LoopVectorizationCostModel::computeFeasibleMaxVF(unsigned int, llvm::ElementCount, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x572a67f)
 #8 0x000000000572b0c1 llvm::LoopVectorizationCostModel::computeMaxVF(llvm::ElementCount, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x572b0c1)
 #9 0x000000000574d51b llvm::LoopVectorizationPlanner::plan(llvm::ElementCount, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x574d51b)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEWF9v4zgO_zTqi6DAluP8eehDkk5wC-xiiu3cPNxLIcu0o1YWDUnun_n0B8rOJOl153ZuClzQ2glF8fcjRUq0VQimdQDXrNyy8uZKDfGA_jo8IPi6A_MA_qrC-vX6DoArG5AVG36IsQ-s2DC5Z3LfYl2hjTP0LZP7b0zuv8A3VT2EW2DZhmWbLwcTuHH9EGlOErFFNv1lG31QnitWbFm2MS7yiskdb-jSjkJ4ieAdT3p6FIUD-sjri_FRBqMj48gTmpofmFxViJabaajczukmd5zgHi6l5Vaejz6-HR0H15wtCYDzBj1nckW6lkCLLbecyS0rbnhxrvhdNQW8Ht3pOOllNIu-7vg8faX59LemUMmi96rtFNdWuZZbxJ4_gY7ozTdgcgVOVRZGZc7PgIiTozsrt-3I3rLyhguek3ax5S5hyvk_px_v0qZPnXhSbDuyQD8obnK0OhmfhvaUIjSanzCn0XFVjkZNQyybc-b0UUceVcIxb3AuTOijbpY8eXgDV25d4iQXaSEnnsXZ7cwaW95cLhTFDyky4-U8PKdJo4GzGT0pj5cfzZjgputZObBss_MqHCDwZxMP75bM7e-fNnefeBiqzkSueDW03ENP-R_xbXmaeBiqmcaOyb21T8eb6D0-gI5M7k0IAwQm91y5mhun7VADjwfgmpjwSunH6JUGqoreQ-9RQwhQ84CDH8U0U4WA2qgINfeD40F708cZyzZ3UelHXg9dP7qTzVi2vvXYetVx5duhAxeJMmdyjz1x0tj1xoIX8NJb9OBJRgUgoh_cI5P7yrijbKwXLtr6WflGzLlouaAF26u-J5ND7Ic4C1w0DsUT-AoDCBU6Lu64iMq3ELlSXh8Wc2GNG15E6wYuRKu1iIhWH5RxrLj5IT3lu8WcIq61yOVMzjISTlYH9-jw2V1YD6_BI8aPtftfxiZMLhqNFr2ojWodhmj0FJ205JfiEGtW3OgxynnOxedGhchFp_uBFTctpQbV35QNxSeWbXJaYlbsABtWfOK98gE8V5GDqzk2vDGWjgdJap_7aDrzDTzLNgUJ_hycM67lvQqBMymbwelo0JE91YIXxj0RjFw1FlWUxkUmdxafwQuNLkTlojAueuOC0YHJnT74pIE9kyu6CY9RRWDF7gCqBi_qobdGqxFm61BQoisPokEvbMSElyyIGiwkPbn-LjIhelMNkYrBOCosEa0Rnep749pw1Dtt3MXOIXEEb0E9JRgNtUBnX0f876pvhkYixjXghbKmdVQ8R_sWVS3Ami6phKixq4wjtE69CBPBJw8DK27yI4w3zatozEuPFMdkPZiut6Z51U3Lil2FbgiCzIl48BAOaOvJQIP-WflahGcT9YGCT4fy9Msr14KIKIymyj-KIwqL-Dj0I4FHAOKNtGdtD2hCFBq7Dl1CDKPSKCfvgggRPQRBu2MCFI0abDSO2oVg3OPb6aEHPVgVQVQW9WMSTf6N8yuvnD6MQCflwfUeaqMjHa9hios9W0LKqPGHOIb5l4KeFnBwHq1lxe5zMUqjVy406DvxrDxVBdHwqFix6z0E8E8g0jK9nxW_yqcLQVHJGN2xYqesxedjiFKlfBqL4DukaDx2QoUwdP0IMhmilZn4HKPP5K42T8JDJ3plPKlGZaxW1k4p_Lfz0KH4qVSklf7PbLxIxe9Z9yad_m4qEsQvZeMPU3HNpOToeIf1YIE2yYsNWEqWbebv7aUfug0lCsfdmazf_ys_3G7m9xVdNnJ-b9KX-b0ZKXEmi4xnL9nxU-h1pooVT51JsWHFJryG8cutNy6m1uHL2HysTkpePd9jiB5Ux-Ri6tZT3ypXv9JDMLnNXiZOU9fGZJFfMl7BPNPvMd5ZUG7oP7s70zplmVwNbmr3LRLER_FLDE785AW_qoZlseKpi_wTND6Bfx0J_UO52hLMaorWhc4OXYSXONM9tWlZ-h_tF5P9ZSPz1QrmspTZ5Ik1FZP7l9Xi_rx1Ggf0LOBskSinKSfC83PCEspSQXEW0BvolKuh3po4RbYHT3vgxin7GkxI2CmYs175SB3Rmp_PeseJ8g3mOq_KH2K2EC-E5_n3mwvRD2NTIjcftbATq1OcFpec51nTnHMmnCHCH8aZbui-KjvAnfkGl1Q33qvXP6Fhxe4k3Kpg9JY2IKKftvu_isVYXqfBL6ld_nI8ln5zDfLUdH1oIJKrp0AszwNRLqVaLJszTr8j9l-njSodTDsM8Q-swV4Eag8qmMrCH-rl6_68OscG8szgJwt0mu1wGEcqRPtRzk30T86t3jhXZTr_eeeOTv21E5fufpgzRPfkzPrSmXld5tWPnLm1yjnwU5lb5f4PLiSS0-uW42P2VX1d1Otira7gOl-WRVaU67y8OlwvlrXMlnKdq3XRLHOt1otc5nW5WMk6y2t9Za5lJstsKbN8Jcu8nEGzbFZNruaLoqmapWLzDDpl7Iz8nKFvr9IT-HU-Xy_l8sqqCmxIb-TG4xrp-YjOz_Lmyl-nh_dqaAObZ9aEGE5mook2vcr7_Ssrb8bdnRv38zvr1eDt9f_-HmFy5Ola_jsAAP__tM5lsg">