<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121581>121581</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Incorrect fold of the comparison of GEPs
</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/HRsqeW
```
define i1 @test(ptr %x, ptr %y) {
%gep1 = getelementptr i8, ptr %x, i32 1
%gep2 = getelementptr i8, ptr %y, i32 1
%cmp = icmp ult ptr %gep1, %gep2
ret i1 %cmp
}
```
```
----------------------------------------
define i1 @test(ptr %x, ptr %y) {
#0:
%gep1 = gep ptr %x, 1 x i32 1
%gep2 = gep ptr %y, 1 x i32 1
%cmp = icmp ult ptr %gep1, %gep2
ret i1 %cmp
}
=>
define i1 @test(ptr %x, ptr %y) {
#0:
%cmp = icmp ult ptr %x, %y
ret i1 %cmp
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
ptr %x = pointer(non-local, block_id=0, offset=-1) / Address=#xf
ptr %y = null
Source:
ptr %gep1 = null
ptr %gep2 = pointer(non-local, block_id=0, offset=1) / Address=#x1
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: 1 align: 2 alloc type: 0 alive: true address: 2
Block 2 > size: 0 align: 1 alloc type: 0 alive: true address: 3
Target:
i1 %cmp = #x0 (0)
Source value: #x1 (1)
Target value: #x0 (0)
Summary:
0 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/eJysVU1v4zYQ_TXjC-GAGlqJfdBB8Ue76O66cNIWPRU0RdlsKVElKdfKry9IyY6dNGmRbiAgImfe45s3lIc7p3a1lBmk94BYeHF86v4CREgXI976vbHZsDnamqLLcq0OEoHlZO9944DlgCvAFY_7N1ofqhtjd4ArIQFXT4Cr7zfuT_kL0Bxu6fDQvJClqiVRCYEJ9dJ5wGnjLQFMj4BzMrx3gDMCd_dA87DcySYhwBZkJ73UspK1D4lqegGJcMWQJAE0oPDfUN0rlKiaCFLhpdX-lBk0hOSBOKZb6WMpERUqvVu8qPfqnebj__j3IacAGQ2NeS7_ZFpzZVJCjm8a1VwZ8yrzG5jDFsCW36K-t7QcByHdOyoeLa9daWzFvTI1KYx0NeCdJwdpVdkBJn2_lpvNehNu_c9ct5JUylXci_0QPPKq0bKXdDo8SmqMqr20gNPa1GNtBNdB1FYb8cdvqgC2oGFtytJJD2wxTmKVuCJ5UVjpXHAJ2bF8Ju4icd1q3R_-YForrs8-N3zIet7GD6l6Q1Sw5uxoJI67BHAaEIO89U-b-ZJ8WX5Zb34lD4_54_LU_A89NP-6_jr-vJ7nn8n95_X8h4e-9PsgnlAS79TMqadgCaFAZ1yrXR0WSVxoI4jvmsvwIS5Krp0MG6ciY3wgTl4QJ5fE-D6xt-0LXjzz4v8Q_JqX9Z4_crsLjcv_sUE0NIj2DeovDzmESx0IXjawZ7qOX-IDRVtV3Han75ESYayVwhN_9Wm5GE2Iqt-LU1JypWUx9mbcWHOQb2T1U4hIa411l7-uoyJjxYzN-EhmyR1LZ5hMp5PRPpvMZJqKgt8WBeIEcbqdiLIULJ0UnAu6HakMKaY0oSy5ZQlObtJZgYUUyKczmZa3HCZUVlzp84wbKedamSWYpNNkpPlWajfM0Uo5YapG6ag6jFOcA2JAAstV7bww1VbVcpi0Nguh8bbdOZhQrZx3z8d45XUc0J9q5-cDLl2QT2crS6MLYkri95KEc7lVztRh57vlj27UWp1dT-ud8vt2eyNMBbiKqvp_wfTfpfCAq1icA1wN9R0y_DsAAP__aoxWXA">