<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/70158>70158</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[ScopedNoAliasAA] Should ScopedNoAliasAA be more conservative in getting ModRef?
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DianQK
</td>
</tr>
</table>
<pre>
This IR is reduced from https://github.com/rust-lang/rust/issues/116976.
```llvm
declare void @use(i64)
define i64 @foo(ptr noalias nocapture noundef align 8 dereferenceable(24) %p) {
%p1 = getelementptr inbounds i8, ptr %p, i64 16
%v1 = load i64, ptr %p1, align 8
call void @use(i64 %v1)
%p2 = getelementptr inbounds i8, ptr %p, i64 8
call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %p2, i8 0, i64 16, i1 false), !alias.scope !0
%v2 = load i64, ptr %p1, align 8, !noalias !0
ret i64 %v2
}
; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0
attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
!0 = !{!1}
!1 = distinct !{!1, !2}
!2 = distinct !{!2}
```
godbolt: https://llvm.godbolt.org/z/7sTrhYdMo
Currently, GVN replaces `%v2` with `%v1`.
Maybe I'm missing something here. Other passes may have provided incorrect alias information.
>From the [LLVM Alias Analysis Infrastructure](https://www.llvm.org/docs/AliasAnalysis.html), my understanding is that the `alias` method returns alias when two memory objects alias **each other**. And the `getModRefInfo` returns `ModRef` when **an/any alias exists**.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVVGP4yYQ_jXkZXQWJrHjPOQhe1GqVW-v6t3ppD5iGMe0GCLASdNfXwH2rnfbrlpVimIDwzcz33ye4d6rs0Hck-qBVMcVH0Nv3f6ouPn5x1Vr5X3_rVceHr-A8uBQjgIldM4O0Idw8WR9IOxE2OmsQj-2hbADYSc3-vBBc3Oe3gk7Ke9H9ISdyrLebeuC0COhh-m_pvmn9XXIWxKF5g7hapUEsqGjR8IaVW8I2y2vSuyUQVD1Jlp11hLWXIIDY7lW3IOxgl_C6BCMHY3EDrhWZwMNSHTYoUMjkLc6orMIDoRVl_TcPmQXkLZKIOsjnDGgxgFNiE6UaSOoB9UQ9hHiVr79MQVU1guAawbQlktIabzYl3ExhTXfEFzrvyafgZ4pSLfZfw_s771E8osBB4-huNAiBTlxmZkz1phR63cYLOuZQZZ8NUAXZMS3EjquYzq7uCSsTGUqvLAXjEu6pIz9O8oy0FzxJYjDADNtbJLN9vhKeusHOI1GBGUNHEJwUdFJNVq3XPwGxnYOs3puyki4Ka0dhtEZGHCw7k5Yw915wCFevDkV8Lk-b0X8DsOzShOANfqe-ZvYm6hTw8DdOVO8pss0eAhOtWNAn44Sb2T78P8Tgbd8sXJCZ2X8QlhZvliwMotcKh-UEWFplIvElsbsH4wXRnNjWIZwtrK1OsQoX7egRO90WthI1OkPwk5b_831v8gnuwT5ODqHJmSef_j-GRxeNBeRv5pmudQUbir080ZJajp1rSd-bxEeCdsOMCjvlTmDtwOGPr716LCAn0KPDi7ce_Qw8Dv0_IpwcfaqJEpQRljnUATIqlWms27gUYavWuMpdtrQI5Dq4dOn709wSOYHw_Xdx75sOsd9cKOI8iHVkbDmNSu3261IzGRGpBWxCyeYGaXow6CnT3K4Q_zanQ_cyJiO8hB6HnIQNU3hRm5iulZClpCf0rj1aCDc7CQpsO2vKMJ8StiBsANy0YON9OR1AQcjZ_gzhicrv2D3aDob3cz4pKb5INUlusm3uSHsxM19coG_Kx_8BLyS-7XcrXd8hfuy3jWMNmVdrfo9ZwLLSu5KVlNGacmw4qxtsGZbSnlTr9SeUbYuKavohu1YVYgNdlzwZita3omakg3FgSv9TO0qDbj9lpZVs9K8Re3TTGXM4A3SIWEsjli3j3c-tOPZx54Q431BCSroNIy_xo4oP9tcqAOpjvC1t6OW8OYEWoTBOgRhjUd35UFdEZSJIyHEAk60rU-r0en9O1M7Td_8-HBxNlZuObhTan8GAAD__2dof-4">