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

    <tr>
        <th>Summary</th>
        <td>
            AArch64 backend: extractelement with poison index leads to OOB memory load
        </td>
    </tr>

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

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

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

<pre>
    here's one that's analogous to a few we've previously seen, that @topperc has fixed:
```llvm
define i8 @f(<16 x i8> %0, i32 %1) {
  %3 = sub nuw i32 1, %1
  %4 = extractelement <16 x i8> %0, i32 %3
  ret i8 %4
}
```
the backend gives:
```
_f:  
        sub     sp, sp, #16
        mov     w8, #1               
        mov     x9, sp
        str     q0, [sp]
        sub     w8, w8, w0
        orr     x8, x9, x8
        ldrb    w0, [x8]
        add     sp, sp, #16
        ret
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U82SmzAMfhpx0WzG2JDAgUOyaa77CB2DBbg1mNomYd--g8lm27SzmYxB0vd9-kGW3utuJKogP0F-TuQceusqRx31Lqmteq96cgT84NGOhKGXIRpylMZ2dvYYLEps6Ya3FXYlnBxdtZ29eUdPNAJ_jTSEjAU7TeQa7KXHVi-kQByBnYEdYc-2vzHXYXMpavVIqIuV2QIvQLyme1xQFyC-IfCcrdpa8PU9BV4iHE4bF1eXQBBn9HON43yLuHQlRPAnKosoWoKTTSBDA40Bv0wlPtiOQiyP59m9i8P5qZ3NDD1hLZufNCrs9JX8v31v5vcWxFrWFmOln-v1nNbs2wlcpPtHfLBXYOWt-Ijg378n3FLedR7ywQErf8XmID_5CfLzU-5N-36yR9C6lblE9ya7FI-gUS5SP3SX4k9dqdSXPTkK_51NoiqhSlHKhKr0kApeiizlSV_lgrcFk1neioylWaFykZWcGtnIknJxSHTFGc9Ylu7TImdpupMqK4VIqS5kUxd1ARmjQWqzW7dvZ12XaO9nqoqizMvEyJqMj1eE8_tnBHE8Hl3T7zPgHPgrcB43Vxwbq6hb1_7uHrRv7DBpI4O20Z2fE1et6Jd67jxkzGgf_GfuoIOh6i6Pnwmfl_SmQ4-T1d6OqEdFCxqSKt7It7cTDjRY947GSpXMzlR9CFNcPH4Bful06Od619gB-CWWvj1eJmd_UBOAX-IMPPBLHMPvAAAA___DBim0">