<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJztV01zozgQ_TX40hUXCGzsA4eMPdly7dYcMnNPCSSD1kLyImGc_PppCeLYiZOJaz4uGxdRUKPX3XQ_Wupcs_tssYAgCVWr9FbqLTdu9g_POeO725WbNNpSyxtRVhaCcBmE1_34rRIGOmqg4VvdWM6ArnEdVNZuTRBfB-QGr4bvBO_MWMpdPdZNiaJlFM3INAnIAvLWwgpsJdQGRw7CmNaNoCVDVbaiyg12fGz41EBZFONSs1xLO-h_wD-Ws4f5bqboMTCYhsPlp4yvhUJrkXvLNVoMAzIL4kVMYI_SaRB_hoBMKIrnEKSfehQ42Q4x8RKoYnAesIAH3mihhBVUCrw_BhMP1s1z7HMIavG2jrHxK1iv1yPiBYrA-_CDm60WRqvLZx-6j2bx5-P0JD49ubAFNfZcjmKwGsQkIseoiUeJot6CIyQ-7ZU5U-HjwoZbz1W3fuBzujym9ws-R-_n82u0OkfJD4J9EKwnGHk_wd72-4NSf5hSv4Ukp9vrShlb6Dp3lCm0MsJYrqy8B8cc47Z7w50bayoN_6Ub9ODjseJfUykvV_zOL-Qtxacx2RmQsoAoHu_PPu_DFKPOH_0CEj_FdfCj_-11I_sVE073wzHE3Z2sQp__e7IZXWozOtVW613er0iiwSKVbxkklxokP2HwlSQk4z3ibsA2rdr8tnRcHJr_VS768YvuHND1EAU2DSV-gwqGRgOxppWuQUFZrRsOtCxRZsSO-2IkVAl67cF4oscv1nH-xclnDl0ligqolLpDZa6mWarsQQXWso0oNs4KBSmslRw4baToz0092i1GsEbR7OXh6lHnXSdsdddX67tWYVlx9q9c-bjyEdLobNMJrKDCPupE--fwJ73TKiApvjU1GwRgMnbCUnmftxuK_nEMjQsCHgMdftgtoMIeDws5xqrRNUJ9RwZMc4P7SmrBcF6D7w8fW7qOQ-37xc7FB_2ijLmA9z2eOuwGhcB-s-OoBS2jGhdFofwqRstDYKlbJOV4xLKYzeM5HdHWVrrJbv_-KmqtRm0js2ddIfrf5mN0Gyeu9xz-XW0b_S8v0NMb32savJnE8zAaVVk0mfOE5TQN52s-DVMWT2k-ixLGUhYl4Wwkac6lyYLJp4AQrzS-LjTjJcdA9M3XQa63VtTigVqBL-ueTpajn3dSZCQkeEVpFEVhkowTMpuHKSHrNAxDRgtMKa-pkId-e9RkXmXelgYfSoz7UzM-ovgRlIpz_07ooRVI2mz1lCELA_tuBjK8YD3ma3ULWBGX13-NvLuZ9_U7Z0x7bQ>53901</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Inconsistent undef/poison constant folding in IR vs DAG
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:codegen,
            llvm:optimizations
      </td>
    </tr>

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

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

<pre>
    CC @nunoplopes @LebedevRI @rotateright 

This was reported after https://reviews.llvm.org/D118264, but I think the issue is older than that.

https://gcc.godbolt.org/z/dbdz9v8na

```
define i1 @fold0(<32 x i16> %a0) {
  %v1 = and <32 x i16> %a0, zeroinitializer
  %v2 = or <32 x i16> zeroinitializer, %v1
  %v3 = or <32 x i16> %v2, <i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison>
  %v4 = bitcast <32 x i16> %v3 to i512
  %v5 = icmp ne i512 %v4, 0
  ret i1 %v5
}

define i1 @fold1(<32 x i16> %a0) {
  %v3 = or <32 x i16> zeroinitializer, <i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison>
  %v4 = bitcast <32 x i16> %v3 to i512
  %v5 = icmp ne i512 %v4, 0
  ret i1 %v5
}

define i1 @fold2(<32 x i16> %a0) {
  %v4 = bitcast <32 x i16> <i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison, i16 0, i16 0, i16 0, i16 0, i16 poison, i16 poison, i16 poison, i16 poison> to i512
  %v5 = icmp ne i512 %v4, 0
  ret i1 %v5
}
```
Instcombine consistently folds these to false
```
define i1 @fold0(<32 x i16> %a0) {
  ret i1 false
}

define i1 @fold1(<32 x i16> %a0) {
  ret i1 false
}

define i1 @fold2(<32 x i16> %a0) {
  ret i1 false
}
```
vs llc 13.x
```
fold0:                                  # @fold0
        xorl    %eax, %eax
        retq
fold1:                                  # @fold1
        movb    $1, %al
        retq
fold2:                                  # @fold2
        movb    $1, %al
        retq
```
vs llc 14.x / trunk
```
fold0:                                  # @fold0
        movb    $1, %al
        retq
fold1:                                  # @fold1
        movb    $1, %al
        retq
fold2:                                  # @fold2
        movb    $1, %al
        retq
```

Now, the change in D118264 resulted in more aggressive folding of the and(x,zeroinitializer) which allowed constant folding to kick in a little earlier, which folded or(zeroinitializer,constant_with_poison_undef) -> -1, otherwise it folded to constant_with_poison.

I've asked @vitalybuka where the or with poison has come from as that doesn't seem right, but we might want to address the inconsistencies we're seeing in the dag folding as well.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztV01z4ygQ_TXypSsuCcl2fNAhY0-2XLu1h-zeU0hgiTUCLyDLya_fBimOnTiZuObjslHJWCDe66Z5ArrQ7CFfLCDKYtUqvZV6y62v_cELzvjubuUrRjvquBFV7SCKl1F805d_18JCRy0YvtXGcQZ0jf2gdm5ro_QmIrd4G74TvLNjKXfNWJsKm5ZJck2mWUQWULQOVuBqoTZYchDWtr4ELRlSuZoqX7jxseFTA1VZjivNCi3dwP-IP1awx_nuWtFjYDSNhztUGV8LhdYSP8o1Wowjch2li5TAHlunUfoVIjKh2DyHaPalR4Fv2yEmXQJVDM4DFvDIjRZKOEGlwOdjMAlgbV5iX0KQJdg6xqZvYANvQKQLbILgwzcetlpYrS6vfXIf1dKvx9OThekphCupdefmKAWnQUwScoyaBJQomy14QeLbnsybip86Gu6CVn3_Qc-z5bG8X-k5-bie35LVOUl-CuxTYL3AyMcF9r7fn5L6xZL6KSI53V5XyrpSN4WXTKmVFdZx5eQDeOVYv91b7t1YU2n5D92gBx-PiX_MSnk58Qe_kPeIT2OysyBlCUk63p9934cpRc5vXRFJn-M6-NFfe21k32PC6X44hvink17o87_PNpNLbSanbI3eFX2PLBksUvmeQXKpQfIdBt-YhGy8R9wtONOqzU-bjotD87-ai778U3ce6HOIEpOGCr9BBUOigVjbSp-gYFujDQdaVdhmxY6HxUioCvQ6gPFEj1-s1_yrk88culqUNVApdYdkfk1zVLkDBa5lG1FuvBUKUjgnOXBqpOjPTT3ad0awxqbr14erJ877Trj6vl-t71uFy4q3f-WXj6sQIY3Omk7gCircEyfaP4c_yZ1WEZnhqKndIAAnYycclQ9Fu6HoH8fQ-CDgMdDjh90CaszxcCHHWBndIDRkZMA0t7ivzBxYzhsI-eFTStdxaEK-2Pn4oF-UMR_wPsdTh92gFJhvdhxZ0DLS-CgKFXoxWh0CS30nKccjlqdsns7pyAkMbr56ZnIwROl2cPrV7CDv6g7wy13e_DZqjcxfpJE44LYY4zix4pPV4e9qa_Q_vMSh3Ybk1OLDJJ3HyajO-STLkiQjdFrSNMkoK_gsYWxepIRNC0JGkhZc2jyafIkICaTpTakZrzhGrs_WDu1660QjHqkT6Ll_O1mORE5igncyS5IkzrJxRq7n8YyQ9SyOY0ZLnEHeUCEP6fXI5MHroq0svpQYnOfce0RR85XiPHiE_LR1tTb53e9_iUarURhgHkb3HyaFZhE">