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

    <tr>
        <th>Summary</th>
        <td>
            AArch64 globalisel codegen clobbering return address on stack
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    This is reduced from a failure in libc++'s testcase `std/utilities/charconv/charconv.to.chars/integral.pass.cpp` when run on an aarch64-mingw target.

```llvm
target datalayout = "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-w64-windows-gnu" 
 
%"struct.std::__1::integral_constant" = type { i8 } 
 
; Function Attrs: mustprogress noinline nounwind optnone uwtable 
define dso_local noundef i1 @_Z8_fits_inIcjNSt3__114numeric_limitsIcEEEbT0_NS0_17integral_constantIbLb0EEES5_z(i32 noundef %0, i8 %1, i8 %2, ...) {
  %4 = alloca %"struct.std::__1::integral_constant", align 1     
  %5 = alloca %"struct.std::__1::integral_constant", align 1 
  %6 = alloca i32, align 4 
  %7 = getelementptr inbounds %"struct.std::__1::integral_constant", ptr %4, i32 0, i32 0 
  store i8 %1, ptr %7, align 1 
  %8 = getelementptr inbounds %"struct.std::__1::integral_constant", ptr %5, i32 0, i32 0 
  store i8 %2, ptr %8, align 1 
  store i32 %0, ptr %6, align 4 
  %9 = load i32, ptr %6, align 4 
  %10 = call noundef i8 @_ZNSt3__114numeric_limitsIcE3maxB7v180000Ev() 
  %11 = zext i8 %10 to i32 
  %12 = icmp ule i32 %9, %11 
  ret i1 %12 

 
declare dso_local noundef i8 @_ZNSt3__114numeric_limitsIcE3maxB7v180000Ev()
```

```console
$ llc -O0 fitsin.ll -filetype asm -o -
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VU2P4ygQ_TXkUrLFhx0nBx_cm0RqaTV76DntxcJAHHoxWIA70_PrV9hJJtPbrV21diLHLkHVo14Br3gIurdK1ah8QOVuxad4cr4eQnQ-PLtV5-Rr_fWkA-gAXslJKAlH7wbgcOTaTF6BtmB0JxB9mJ8qQFQhCh4UoDUOUSJ6mKI2OmoVED2IE_fC2Zc7M48uT3aa1jaq3nOTjzyEXIwjWmM4n5QFP1lwFrgFzr04rYts0LY_Q-S-VzFHeIdwc3mv8fIY8zIsQ4sXSB654a9uioDYDhClKhsQa87ZiFizLuZXphlFrGE007cRQjeINYRuMjtProvsKY1R-hN-9Ho06op9TfSc_tpKdw5ZbydEKSxRlw-iJaI0RD-JmKeSsQaxpm3JYlxr0gpnQ-Q2zgBsB_F1VICqB9AbQNXuDSh7gMNkRdTOQhOjD4g1MEwhjt71XoUA1mlrtFVg3WRTguDGaJ1VMJ0j7xKRGUqqY_KSwbXGCW5mf6mOoAmgArd_btqjjqHV9lE8f3mKrG0JKew0KK9Fa_SgY3gU-_2--4rbL0-4JdU_OD12v3d4v98_le13RDea0dsqiJYY0d9mlrQkP0yazDzPEd2mMlzop5lirg83KV34RHkTMDe6t0Ag_e6gy_8R-g52fQ-bDuDNrbh3q2a3XkVl1KBsHKMHbbtUqfDZbBJGqtlcWEYB34zbykkR1P0GXGKqD9hsfl2a5X9M8z5m816aF2dGbwfs4r3-oPbbmZRxXF436F8CCJ4jBDd3V2azXJmPrwkb-LeH6oVsMMZ4_4KSymx_giUz7Hf1LV63BEN0C5U7t0UktBhGmMyN6TYle0G5OHsV56u8xCzq8VZOpBKG-3dF4HOM3kj1u_qdToAz6qqSBRgjIPsDQ5IbbXNjIDtqo2Yh5GGAzEH2BmMlaya3bMtXqibrLaVkywhZnepjeZS46jaFOHYd7iQnUvJKMVoQUVWSr3RNMWV4Q9YUlyUhealKyo-V3NKSkgozVGA1cG3y1Gdy5_uVDmFS9bqoCrwyvFMmzL2VUqvOME-mw1zuVr5OMVk39QEV2OgQww-UqKNRddPM3QN64zpudFAGhJOqVxaEcV2nvLZ92rvJW-BSzpLuLITIxV-ryZv6FOOYVB_RA6KHXsfT1OXCDYge5s64fLLRu2clYuq-KcPUhmcGfwcAAP__IC1kpQ">