<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">