<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">