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

    <tr>
        <th>Summary</th>
        <td>
            [DSE] Missed optimization : eliminate `store C, ptr` if `load ptr` is known to be `C`
        </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/nVPFem

### Motivating example 

```llvm
define void @src(ptr %p) {
entry:
  %l1 = load i32, ptr %p, align 4
  %cmp1 = icmp eq i32 %l1, 0
  br i1 %cmp1, label %then, label %else

else: ; preds = %entry
  call void @dummy()
  %l2 = load i32, ptr %p, align 4
  %cmp2 = icmp eq i32 %l2, 0
  br i1 %cmp2, label %then, label %common.ret

then:                                          ; preds = %entry, %else
  store i32 0, ptr %p, align 4
  br label %common.ret
 
common.ret:                                       ; preds = %else, %then
  ret void
}
```

can be folded to:

```llvm
define void @tgt(ptr %p) {
entry:
  %l1 = load i32, ptr %p, align 4
  %cmp1 = icmp eq i32 %l1, 0
  br i1 %cmp1, label %then, label %else

else: ; preds = %entry
  call void @dummy()
  %l2 = load i32, ptr %p, align 4
  %cmp2 = icmp eq i32 %l2, 0
  br i1 %cmp2, label %then, label %common.ret

then:                                          ; preds = %entry, %else
  br label %common.ret
  
common.ret: ; preds = %else, %then
  ret void
}
```

### Real-world motivation

This snippet of IR is derived from [linux/kernel/delayacct.c@delayacct_init](https://github.com/torvalds/linux/blob/8d025e2092e29bfd13e56c78e22af25fac83c8ec/kernel/delayacct.c#L39) (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/csqq89bef

**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/eJzsVs1u4zYQfhr6MohBjSxbOvjg2BWwwC5abIuit4IiRzYbilRIyrvepy8o2Ym9TdL00FMbEDFIzQy_b34pQtB7S7RmxT0rdjMxxIPz69-2h9Osceq03hh9JITeO9eyfAOHGPvA8g3DmmEtxq9zY47d3Pk9w1oSw_obw9r--lNNHeM7xjfn_5hPCz65qI8iarsH-iq63hDcCC75tJLd6UhRqy3B0WkFbMGDlwzLPnpgWPQMK2Cr-0mSbPSnBHDcQRIwGbB8B8YJBTpHhlt4Vt2CMHpvYXGlILt-UtGy64Eek9ZkKMnzi2TjQWcX-fTFiIZMOogHsjcHZAJdUxz3-QZYfg-9JxXG65LgCP98gRTGPHFWQ9edGJYMq2tu-M-54Yvc8FVu-DY36brO2bmneM1wFMs38O6_V1yB21v_AYToPI2w-d_QbfzrKM8Zd3X8brB_RZrQTUBH2ufrPcUxeme3rHbfpfe1u6Sw0BC0zihSEN1TBr-3JOI-_l8S_9WSeDPRX8z0fyOHnxv8ZxLm7ovzRkF37vXOXov-ctABgtV9TxFcCx8-gw6gyOsjKWi964AV90bb4SvD-oG8JcOwVmTESUgZ5zKF_7L7XVsdWbFjWN7Op72Oh6GZS9cxrKPzR2FUYFhfDDfGNQzrUnEsCHmFhFXTqiynYilXJSGKFotWyDKXJcnXoGD-Ma_GksNStJE8_JhDr3sy2hLDan4hTU_zTjTuSImzAE9qkKTgSD5oZ-fwoYWTGxiuUpuzkTyFSAq0hXggcF7vtRUGwtC4PupOmOQ-YRU8b1MkAxEIE1Ir-c4rTjXOxPPETsNahsfHsmqovQ1nWh8pQkfwYN0X0CMwSL1KOttq30E8iAg6MlwFEHZCoL-N8QbX987Hweo45mw8CPsQ5pPZmVrnqsorMaN1tsqyZYarspgd1mUjcZlli5JnGZFYtDxvVS6bpagqvhLtTK-R44LnWPJVUS2K-YoLjiSLClslWklswakT2jw9S2Y6hIHW5bJCPhvrJIzvHcROh0Dq7ho1Q0wPIb9O2nfNsA9swY0OMTzbizqa8cm0-_kHVuzg02jmlnwqMjK601ZEArbk09jantsRW_LkztTRU5-6nITR0RaiS9OALfmWLfls8Gb9RmKPM2H6ueu9-4NkZFiPpFOyj7z_DAAA___Dc9RA">