<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121890>121890</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Missing flag check when folding comparison of geps with the same base pointer
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
llvm:instcombine
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
dtcxzyw
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Alive2: https://alive2.llvm.org/ce/z/P5XbMx
```
----------------------------------------
define i1 @src(ptr %ptr, i8 %idx1, i8 %idx2) {
#0:
%gep1 = gep ptr %ptr, 4 x i8 %idx1
%gep2 = gep ptr %ptr, 4 x i8 %idx2
%cmp = icmp eq ptr %gep1, %gep2, offsetonly
ret i1 %cmp
}
=>
define i1 @tgt(ptr %ptr, i8 %idx1, i8 %idx2) {
#0:
%cmp = icmp eq i8 %idx1, %idx2
ret i1 %cmp
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
ptr %ptr = null
i8 %idx1 = #x00 (0)
i8 %idx2 = #x40 (64)
Source:
ptr %gep1 = null
ptr %gep2 = null
i1 %cmp = #x1 (1)
SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 > size: 0 align: 1 alloc type: 0 alive: false address: 0
Block 1 > size: 0 align: 1 alloc type: 0 alive: true address: 1
Target:
i1 %cmp = #x0 (0)
Source value: #x1 (1)
Target value: #x0 (0)
----------------------------------------
define i1 @src1(ptr %ptr, i8 %idx1, i8 %idx2) {
#0:
%gep1 = gep nuw ptr %ptr, 4 x i8 %idx1
%gep2 = gep nuw ptr %ptr, 4 x i8 %idx2
%cmp = icmp eq ptr %gep1, %gep2, offsetonly
ret i1 %cmp
}
=>
define i1 @tgt1(ptr %ptr, i8 %idx1, i8 %idx2) {
#0:
%cmp = icmp eq i8 %idx1, %idx2
ret i1 %cmp
}
Transformation seems to be correct!
----------------------------------------
define i1 @src2(ptr %ptr, i8 %idx1, i8 %idx2) {
#0:
%gep1 = gep nusw ptr %ptr, 4 x i8 %idx1
%gep2 = gep nusw ptr %ptr, 4 x i8 %idx2
%cmp = icmp eq ptr %gep1, %gep2, offsetonly
ret i1 %cmp
}
=>
define i1 @tgt2(ptr %ptr, i8 %idx1, i8 %idx2) {
#0:
%cmp = icmp eq i8 %idx1, %idx2
ret i1 %cmp
}
Transformation seems to be correct!
Summary:
2 correct transformations
1 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VlFv4zYM_jXKC9FCpuM6fvCDmzbAsOtlSLthe5Rt2tFOtjxJTpP--kGO0yS97e62Bg2M2CLFj5-oDwSFtbJuiVIW3TLE0hXbl90zQ2TR3UT0bq1NOhonuS53aabkhpCFGayd6ywLM4YLhgsx2K-V2jTX2tQMFwUxXLwwXPwS_Z4_bBnP2A0fH54xnl394I_xrKRKtgQyADbl1hQMZ50zwDDqnGE4BznzC1lug7MVMkyAxbc-IYbcs-UZeGdNXQAsvIOaOjjHmsL2FO8YgD8SgIeAoumG_dJ_0F-HGJ_YB42Q_lNXlSWnW7UbYg254aQDhGce3_n_8I6F929r4Wr3_lq8ZXoOcHqsf6b2ZERrK20a4aRuodRkW4axgw0ZWe0YBvsLv1-tlisvnd-E6gkaaRvhivXo3IqmU7SndTzQQKztlWI8O_IarAzDLefAcMYZJqd-fPVPB__NdL-B8exR96Y4z_IqhTHN0Yxn2YPTWnlwb5gFR-jlr6v5PTzcPyxXf8DjU_Z0f7i3__Xw7PPy89Wn5Tz7BLeflvOfH_e0b5UuvgCHQQ6JlS_-OMAZT4SSdesXwbBQugC3607dm2FRCWXJG8rSkLWjfwQO3gHsTP8Gd7z6J2Fqcnv-Xxfy9BL3FwQbLxEP8LbQe6Rz_2n8u3tLcOHm0vbP_73BfCfow5vMBYpy4S5jiRoLTkNOUGhjqHCvjeZ9AsCLC8B-XwFfC-DbQR-ugAtU5QMV8Ng3jTC7Q3I8bAB3hmEHbwCy_ZafQyWkovLK6avO6A39y679bARkjDb2dN6ZlGlYJmEiJpQGcXiDIU8wmazTgMppPE2SEGfxjIoq4kGUx1MqZijiGGkiU-QY8YDH_AaRJ9e5iG6KIqhEmOdREnI25dQIqV4nr4m0tqc0wGCW8IkSOSk7TneNtIVuOqkG1n7IwzlD9JEszGRrXaGbXLY0zn8m9a6rvK8tm3IlrbPHNE46NYyNP7XWzce46A4epLWyraFSooZiTcUXeF5TC5VWpbd7BsJIq1vQlZe6hWfp1uDWBFY0BLmwBJ2WrSMz6Y1KzwfNWrp1n18XumG4GKjvX_5m_hwksBgqYBkuxiJsUvw7AAD__9ieDHI">