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

    <tr>
        <th>Summary</th>
        <td>
            Missed Optimization: Store of Known Zero Not Folded in Conditional Path
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          GINN-Imp
      </td>
    </tr>
</table>

<pre>
    The following reduced IR is derived from https://eigen.tuxfamily.org/dox/Ref_8h_source.html.
More specifically, it comes from function ` EIGEN_DEVICE_FUNC bool construct(Expression& expr)` (line 111).

Godbolt: https://godbolt.org/z/436xvYdsv
Missed optimization: `store i8 %2, ptr @v, align 1` --> `store i8 0, ptr @v, align 1`
alive2 proof: https://alive2.llvm.org/ce/z/kjuHWQ

```llvm
@_ZN5EigenL14no_more_assertE = internal global i8 0, align 1
@v = external global i8

define void @src(i1 %0) {
  %2 = zext i1 %0 to i8
  br i1 %0, label %common.ret, label %3

3:                                                ; preds = %1
  %.b2 = load i1, ptr @_ZN5EigenL14no_more_assertE, align 1
  br i1 %.b2, label %common.ret, label %4

4:                                                ; preds = %3
  store i1 true, ptr @_ZN5EigenL14no_more_assertE, align 1
 store i8 %2, ptr @v, align 1
  br label %common.ret

common.ret: ; preds = %1, %3, %4
  ret void
}

```

opt-trunk -O3 generates:
```llvm
define void @src(i1 %0) local_unnamed_addr #0 {
  %2 = zext i1 %0 to i8
  br i1 %0, label %common.ret, label %3

3:                                                ; preds = %1
  %.b2 = load i1, ptr @_ZN5EigenL14no_more_assertE, align 1
  br i1 %.b2, label %common.ret, label %4

4: ; preds = %3
  store i1 true, ptr @_ZN5EigenL14no_more_assertE, align 1
  store i8 %2, ptr @v, align 1
  br label %common.ret

common.ret:                                       ; preds = %4, %3, %1
  ret void
}

```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsVktv4zYX_TX05sKGRMqvhRaOY-UzvtbTTl_obAxKvLI5Q_EKJOU4-fUFJU-aOG3ngc6uhgGZ5uXhOYeHuJLe64NFzNn0hk1vR7ILR3L53Xa3G2-bdlSSesh_PiLUZAzda3sAh6qrUMH2LWgPCp0-oYLaUQPHEFrPxIrxgvEC9QHtJHTnWjbaPEzIHRgvFJ0ZL95ivV8c9546V-HkGBozYcnqe3IIvsVK17qSxjwwvgYdoKIG_bBF3dkqaLLAZglstneb3f528-t2vdkXv-zWUBIZqMj64LoqML7YnFuH3muyjM8Az61jfBnXMr4w2iKkacr4Mu7OktUdqZJMYGJ1peUwTFw0PDJeZGJ2Pv2u_Cny1t6jAmqDbvSjjPwiBJslPkRJegGMT3lU0wYHLEtO8bc0-mAhjWzGYyY2LxYkf1_NkpU0-oQcWkdUv2Y7zE6MOTUXxhVeaH943_3vtx8HtRGq_8bCOM6S_bvddBPP7bs0s7RvyOFeeo8ubICJW9A2oLPSwMFQKc0T0Y_kepBTX4rn69JhV4V19P1EWkVt3lWML3QaHUoYXwKb37BkBb1jPdAjngNcCiDQAARQOnhatQYjSzRxVFHTkJ04DC_-FsPmIpr1hR8mbqB1qHzPhvFp-pHfpBwYGpIKdPrsxP7Bx5d2PdMxKfnnKMkGJdm_oUT0DC6ZSyG4Dr9KxGfF_CL2r_T1ip6N4-V57TpfD5yHZ9YDOgx9lCLE_PYq18OQ2jAOrrMfYPxGwAEtOhmwvy2v78Cn0mmokmbfWSsbVHuplAPGRfJfar8gtd8sht8ih1_pdnaV1vTTaR2pXKilWMoR5uk8m_KU8xkfHXMsl7xOF1LO04WSNcplsshQlVWNKpFCjHTOEz5NMp4m0zRN-ESUXKFczIWcLWd8LlmWYCO1eWoJI-19h3kqZlMxG_VW-P4dgHOL99DPMs7jK4HL46Jx2R08yxKjffB_wgQdDOaX_vfmqv_91J8G1fB_S_cW3qEj2FGAgoxCBdrCmqzSsVwa-EGG46hzJr_qvDocu3JSUcN40V_S4TFuHb3H2OOLnq1nvLjIOeX8jwAAAP__Az6IAQ">