<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJylVN9vmzAQ_mvMi1UEJgnhgYf86KRobR_WdnucDBzg1diRbdqmf_3OJG0Ssk2qhg7B2ee77747X6GrXd46t7UkWRD2BaURru2LsNQdKlI-v3-utkb_gtKhWkhd4KfjQp3YCL_2YLiytTadReU7mmsj3uDjf6W7QigIy-2WsOQmjtiERGsSLcgsOsigUnz2cOiqhfKJippytaNCWWf60gmtaAHuBUBR1wKVmldoUA0KvDrDS0c7vqOdrkS9u3DaQafNLjyuo3_C5jfcuiEeVBuMdEWSa-QB7BIwJcxi_rghLEOhJF0eD1OK2_785gQeYbMN9ayemA1Px5_gJ9LUeIfWVd4mWShE7RFsfNAG3MaB4cgYru1DEraij__YvcD0keySC0l173ySL0AN8LKFPVXlQK4UnXAUU_BLpxR7Bl-McPBHv05f8njk8q7vPB0HOpGJNQq95a8DSfZB35ccWUpXKHQTYqgfPtKDvh18HjMb8WfA9UbRmksLJBllfB6UsKWXcyOSrk_a4V0ZdwJh8agZRlBGuz4_LM9ZLECEn22sT4QYXZk7jSVUcke5AV_mobRCNYfeHKdDeY09hIaEpc9AucS2qHa0AgM1vqrEml0wsPKOkXhNW-4PUQulVheGf0lvDyk8JXy1omQS1S1v1XB9UTHacUQmmtbRoMqTKksyHvDetdrk377ei06roDfy82NLWNuDn0vTJJ3FQZsDm2VVUUyrtM6maRZHfFJOM5Zl87iGal4GkhdYxJxMsY_Y4DRZ6K3D6_LG_QVBZ4xM18H_gxE5ixhKHMeTJInSMC2iKp5XDOIogWqWIDOAA1eG3k-oTROYfHBZ9I3FTSmss8dNbq1oFMCAHRE64STkZ0N4P3dsySX3M_oGR-j1YXJeUdvbrSh1b6nqpTzMiX3L9BaCAX0-QP8NwBvqlw>53761</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            VectorCombine::scalarizeLoadExtract - suspicous null check after use
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:optimizations
      </td>
    </tr>

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

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

<pre>
    https://github.com/llvm/llvm-project/blob/main/llvm/lib/Transforms/Vectorize/VectorCombine.cpp#L1024
```
    // Check if any instruction between the load and the extract may modify
    // memory.
    if (LastCheckedInst->comesBefore(UI)) {
      for (Instruction &I :
           make_range(std::next(LI->getIterator()), UI->getIterator())) {
        // Bail out if we reached the check limit or the instruction may write
        // to memory.
        if (NumInstChecked == MaxInstrsToScan || I.mayWriteToMemory())
          return false;
        NumInstChecked++;
      }
    }

    if (!LastCheckedInst)
      LastCheckedInst = UI;
    else if (LastCheckedInst->comesBefore(UI))
      LastCheckedInst = UI;
```
Not only are we checking for !LastCheckedInst after we've already dereferenced LastCheckedInst, we also have a second LastCheckedInst->comesBefore(UI) check.

CC @fhahn and @rotateright 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVE1v2zAM_TXyRahhy0ncHHzIRwcEa3tYu-04yBZta5WlQJLbpr9-lJM2ibMNqEHDpkSRfE8kSyN2Rev91pFsQdgXlEb6ti_jynSoKPX8_rnaWvMbKo9qqUyJn45LfWIjw9qj5drVxnYOlR9obqx8g4__lelKqSGutlvCsts0YROSrEmyILPkIINK8dmnQ1ctVE9U1pTrHZXaedtXXhpNS_AvAJr6FqgyXKCBGBR49ZZXnnZ8RzsjZL27cNpBZ-wuPq6jf8Kub7nzQzwQG4x0RbIb5AHcEhASorj-viFsjkJJvjwephS3w_nNSXqEzTY0sHpiNjwdf4JfSFMTHDovgk220Jh1yGATgjbgNx4sR8ZwbR-SsBX9_p_di5w-wC65VNT0PoB8AWqBVy3sqaoGcpXspKcIISydUhwYfLHSw1_9enPJ45HL-74LdBzoRCbWKPSOvw4kuUfzUHFkKV-h0E2MoX6GSI_mbvB5RDbiz4LvraY1Vw5INkJ8HpSwZZBzI5KvT8rhXRlXAmHpqBhGqYx2Az68nrNYgBl-trA-EWLUMvcGr1CrHeUWwjUPVyt1c6jNMRzKa6whNCQsfwbKFZaF2FEBFmp8dYV3dsHAKjhG4g1teThEHVRGXxj-A94-pfiU8NWKkklSt7zVQ_uiYo3nmJlsWk8jUWRins155KVXUJwNkX3fuIorHmbMLY6Am0PnX1HXu62sTO-o7pU61Pkecu8g6q36_NiTzvUQ5to0y2dp1BYTATPBpjVM8vm8mqY8zfN5PmeTvGR1PRWR4iUWQUGmWIdscJotzNZju73x0GDojJHpOpIFSxhKmqaTLEvyOC8TkV4LBmmSgZhlyAvguFVxcBIb20S2GLIr-8bhppLOu-Mmd042GmCIjP5571tji29fH2RndDQAKQYUfwCXOdTw">