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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization : unrelated store clobber blocks elimination/merge of `memset`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    Alive2 proof: https://alive2.llvm.org/ce/z/7bT7UM

### Motivating example 

```llvm
define void @src(i64 %a) {
  %stack = alloca <136 x i8>, align 8
  %stack1 = getelementptr inbounds i8, ptr %stack, i64 8
 call void @llvm.memset.p0.i64(ptr %stack1, i8 0, i64 136, i1 false)
 store i64 %a, ptr %stack, align 8
  %stack2 = getelementptr inbounds i8, ptr %stack, i64 24
  call void @llvm.memset.p0.i64(ptr %stack2, i8 0, i64 24, i1 false) ; can be eliminated by the first memset
  call void @use(ptr %stack)
  ret void
}
```

can be folded to

```llvm
define void @tgt(i64 %a) {
  %stack = alloca <136 x i8>, align 8
  %stack1 = getelementptr inbounds i8, ptr %stack, i64 8
 call void @llvm.memset.p0.i64(ptr %stack1, i8 0, i64 136, i1 false)
 store i64 %a, ptr %stack, align 8
  call void @use(ptr noundef nonnull %stack)
  ret void
}
```

### Real-world motivation

This snippet of IR is derived from [postgres/src/backend/utils/adt/ruleutils.c@select_rtable_names_for_explain](https://github.com/postgres/postgres/blob/93582974315174d544592185d797a2b44696d1e5/src/backend/utils/adt/ruleutils.c#L3822) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, see also:https://godbolt.org/z/8aMxr37Ev

**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVU1v4zYQ_TX0ZRBDGurz4EM-VsACGxRYbIHeAlIcyWwoUiApb7K_vqBsJ07aXSDttQBhSxRn-B755o0IQY-WaMfKG1bebcQS987v_rjdP2-kU8-7a6MPhDB75wbGr2Ef4xwYv2bYMezE-nVrzGHaOj8y7Hpi2P1g2NXyW_37PcvuWHZ9-kV-HHDvoj6IqO0I9CSm2RC8WVhlx5HyHqcUDdoSHJxWwIos-J5ho6sCGJaCYQusvjmuhDQVougfgfE7EMa4XgDjtzmv4Al0w_gnhrcgjB4tNO-D8jVqpEiGJrJxjh60lW6xKqRgvIU0dV6e3hOMc55eGPOCcj2WiaZAcTtnW10VDJvL6HwNbyA7p8l5tT7mMAgTiGF7yhui8wSvhP-O4id88N_xweKc6GOM8D0jLN4RAsZvoBcWJAEZPWkrIimQzxD3BIP2IcJxh39EsKQkzVvI50MCT3FdeJJRffdOT5ciO0EYnFGkILqPCTCO8X8B_lKAP7k1m4jQANZZuxjzX2_x1VO-kjBX3503CqaTvTh7ufTbXgcIVs8zRXADfP4KOoAirw-kYPBuAlbezC7E0VNg2K0m00nRP5JVDLslapPmhYoMO78YWme2fTIkMtTHBx-FNPRgxUThYXD-gZ5mI7Rl5R3D5q13jjruF7nt3cSwu9j24lEaJxl2LS8bbOuC52VeF6osirLFvClV3dYCZVFUbaVyKj-EGfkX3iCu0sVGDJE8_MZh1jMZbdPNb8_nRi8uLaQ7UDo2AZ7U0pOCA_mgnd3C5wGe3cKwTjqxkTyFVNjaroXtvB61FQbCIt0c9SRMugFhFby-JhkFIhAmOMav352XU9KZeOozqcU04v7J8_rT4a0i0vhCyUXg0brvoFdgq-f0zg7aTxD3IoKODOsAwh4R6B-rZMDNs_NxsTo-JzxxL-xj2B7TbtSOq5a3YkO7vM55xos2azf7HWEhqmqoslKprFYtSVnnPalBKMHbVm30DjMssiLneZvlRbati6yQqufYiL4UuWBFRpPQ5qWZbnQIC-2apuK4MUKSCWuXRpx0CKSuLlEzxNS-_S5FX8llDKn8dYjhNV_U0dDufg1-Szk19sV6MqsVH0u9N05K8iCN6x_Di1Wve3UT-ZFSEbEqO5l1lW0Wb3a_0Phqpse_q9m7P6lPmlxZJomuRP8KAAD__2Twmts">