<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58617>58617</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Comparison of object against addrspacecasted null pointer are not optimized out
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
bcahoon
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arsenm
</td>
</tr>
</table>
<pre>
I recently saw a test case where a conditional branch was left behind that should be trivially optimized out. A constant addrspacecast from a generic null pointer is compared to a valid object:
```
@lds = linkonce_odr hidden addrspace(3) global [128 x i32] undef, align 16
define void @foo() {
bb0:
br i1 icmp eq ([128 x i32] addrspace(3)* addrspacecast ([128 x i32]* null to [128 x i32] addrspace(3)*), [128 x i32] addrspace(3)* @lds), label %bb1, label %bb2
bb1:
store volatile i32 0, i32 addrspace(1)* null
ret void
bb2:
ret void
}
```
opt -O3 leaves behind this branch, which should trivially fold to false
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNk0tv2zAMxz-NfSEa2HL9yMGHtEGHHYbtsvOgB21rVSRPkpN1n360kyyP7lBAkC2J5J-kfhJOvbWfwaNEG80bBH4ADhFDBMkDwmFAj7QjnVU6ame5AeG5lQMceACDXQSBg7YK4sAjhMFNRtEWRK_3mhuK6caod_oPKnBTXMFmDhYitxG4Uj6MXCJpRei825FUjxa9lmAnY2B02kb0oAN57UbuKUp0ZLXnRlNA8RNlTIpNkm2T7DxX2Wkcl4-ZUQGSYgtG21dnJf5wysOglUJ7ySFhTZGwNfTGCaoyKZ9y1sBv0AVLyi1MVmGXsGcg4d5CXl1L0pG2CHtHOZFe5xxFm4Ml9dPRQojsX5pALQSdg5a7EfAXzLZ3avdZJWxz1633TrPN0jRq0AfiLfPzRyzh2MKTg-ECqT2sFCK_W7PrnszHl4pDdH5ukOFRG5zFIJu9559ryfwkORdy9vUYl9beRmdX0e8s6u3_SVhmwhEevhbELt9juNBLiB3JntM6DJoQP9F8QblzZuGv4yZgim1eVVVdZSWrU9UWal2seRp1NNg-L7Tq4Cy47sQp8J5rQv_2JonoG9SJcbAu3j4bSCdv2iHGMcxlsxcavY7DJFb0LmhhzP78eRi9W54Fe9EhTEgX91I2VV6nQytY8VipdS2rIitRVmvVqKJsuJJCyKYR6XKboSUqEsYEl69oFSluvmw_fftOW4RIqluWMZZnjCrPWFateFWXhXgs1lmOGeFPvOCOa7Oa01k536e-XTITUx9mmHSI4XLIQ6AnhXhWlXxwzp7E-BQH51vuA9pduhTULtX8BdzOdBs">