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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization when partial memsets can be forwarded 
        </td>
    </tr>

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

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

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

<pre>
    ```llvm

source_filename = "example.9a6feed92ef310bf-cgu.0"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define fastcc void @example(ptr nocapture noundef writeonly %ptr) {
start:
  %alloc = alloca { [20000000 x i8], [20000000 x i8] }, align 8

  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20000000) %alloc, i8 2, i64 20000000, i1 false)
  
  %f2 = getelementptr inbounds i8, ptr %alloc, i64 20000000
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20000000) %f2, i8 3, i64 20000000, i1 false)
  
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(40000000) %ptr, ptr noundef nonnull align 8 dereferenceable(40000000) %alloc, i64 40000000, i1 false)
  
  ret void
}

```

https://godbolt.org/z/EYas7dzar

The `alloca` and `memcpy` can be omitted/bypassed by directly memsetting `%ptr`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VE2TozYQ_TXi0gUlxPeBw8w4vuWUXHLaaqDBSoRESWJtz69PCWyPZ2sPyRzW5Wqalp76vVbT6JycNFHLildWHCJc_cnYtr9q6i9RZ4Zry0q-_5X6PjN-YPxlt86stqdvo1SkcSZg2QGYEHTBeVGUNFiOREMjaMxS3o1xP60JZ0LsaI92Ig8DelR4Nat_4OOZZS8UL6LiLHvJxGbCa_r5NXhlvplY3p2xDqBU1LGug1PeMWUe_5GK-sf83spFPbhf6vJbmcer_kebs46V1OslnvT6QO12oFFqghGd73v4buQALOc34UzUi7egTY-LXy2BNqseaISzlZ6MVldgoli8ZaIBVr3eiunRepbdEkDYgkqZfmO2eRg2AyteBd9_cAFZs-LAxNvPwsCqbQmVnDTUz_wBelTqQTxcbDLT7MgnC09CLe8adubaaL0qdT8KBrI0kiXdE3ab4nvyTdONekguaxDbs8zhY88byBRGVI6YaB6KP5SPYpM9kSdFM2kfyEjdBTouqBNvEEKfMj1n-DUqR3GTmP1PiT_l1S_XwOuL1PLP1Lb22ov05TM-lTb_b8os-U3Yrduqw3PbPSbJc_Dk_eJC44sjE8fJDJ1RPjF2YuL4zsTxt7_QVcM72mfQnycCVvL9u2AlB9RDCOxlDIEeNXQEZpbe08DEsbsu6BwN0F1hkJZ6r66wt4OXegroW91KnkRDmw1N1mBEbVrxqmh4VWTRqUVRCqoQR17mneg5YlmkJZb5OBRdWdeRbAUXORcpT-u8KLIEqSl6no9lXjcppywMihmlSrZ7N3aKpHMrtXWaVWmksCPltmkshKYzbIth_BSHyLYBE3fr5ELfSOfdxyleekXt73LTaBYvZ_mOXhoN5xNpWNB6ieqm2N3rMxp7RjvQANFqVfvDZUh_WrukNzMTx2367494seZv6j0Tx42eY-K40f83AAD__0ws25M">