<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/138345>138345</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Assertion failure with gvn-sink
</td>
</tr>
<tr>
<th>Labels</th>
<td>
bug,
crash-on-valid,
llvm:GVN
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ilovepi
</td>
</tr>
</table>
<pre>
I tried to enable GVN hoist/sink when compiling Fuchsia at -Oz, since that should improve size slightly, and ran into this. I know those passes have had some issues, but I figured they had some attention a while back and we should try again. Probably some value as a regression test, if nothing else.
Assertion:
```console
'llvm/lib/Analysis/LazyValueInfo.cpp:679: std::optional<ValueLatticeElement> llvm::LazyValueInfoImpl::solveBlockValueNonLocal(Value *, BasicBlock *): Assertion `isa<Argument>(Val) && "Unknown live-in to the entry block"' failed.
```
Here's a reduced test case where the assertion triggers.
```LLVM
; RUN: opt -passes="gvn-sink,correlated-propagation" -disable-output %s
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @c(i64 %0) {
entry:
switch i64 %0, label %sw.epilog [
i64 1, label %sw.bb
i64 0, label %sw.bb1
]
sw.bb: ; preds = %entry
%1 = load i8, ptr null, align 1
call void asm sideeffect "", "r,r,~{dirflag},~{fpsr},~{flags}"(i8 %1, ptr @c)
br label %sw.epilog
sw.bb1: ; preds = %entry
%2 = load i8, ptr null, align 1
call void asm sideeffect "movdqu 0 %xmm0 \0A\09", "r,r,~{dirflag},~{fpsr},~{flags}"(i8 %2, ptr @c)
br label %sw.epilog
sw.epilog: ; preds = %sw.bb1, %sw.bb, %entry
ret void
}
```
>From Clang:
```c++
// RUN: clang -cc1 -Os -mllvm -enable-gvn-hoist -mllvm -enable-gvn-sink -mllvm -wholeprogramdevirt-branch-funnel-threshold=0 -emit-llvm %s
long a;
char b;
void c() {
switch (a) {
case 8:
__asm("" : : "r"(b), "r"(c));
break;
case 6:
__asm("movdqu 0 %%xmm0 \n\t" : : "r"(b), "r"(c));
}
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVlGP2zgO_jXKC-HAlmM7eciDJ2l6A8xND3fovBayzdi6kSWvJCdNH_a3Lyg7k3SnWGwXDRxDoiiS-j6alHBOthpxy7IHlu0XYvSdsVupzAkHuahMc9k-grcSG_AGUItKIXx8eYbOSOcZPzipX-HcoYba9INUUrdwGOvOSQHCQ_TpG-M7cFLXCL4THlxnRtWA7AdrTghOfkNwSradVxdSFboBKzRI7Q34TrolPMKrNmfwnXEIg3AOHXTihNCJBpzpEaRzIzraXo0eHuEo29FSzB1eblrCe9ReGg0Czp1UCJWoX4PHM14D8_YCohVSL-E_1lSiUpdp90moEUE4EGCxtegcWfJIMOxAHkEb39HxUTlcsrhkcVk6h5Y8spSmLI-npzbaGYUk4oVSp57xg5IV44dSC3Vx0jF-eBLfLi_k9FEfzbIeBpaWebFhaQnON2QxLc1A1oVi6S6oPgnvZY0fFPaoPUs_QLAedL-z99gPahI7o074oEz9GhafjX4ytVCMr8McGC_pgA_CyTqoTZIQx9v5gOWxdIKlu9K24-x7MsH4BhjPGc-Bcf5ZE5calDxhJDUEkhFQE-4VmWecM17AUUiFzfIetQnTf6FFxouJh2asiWZ0HmrhkDLRYrAo3kLzVrYtWjdz8mbu6enl3zRPH-C_n5_pOGAGD9GUYSzdM87bk44oxRnf1cZaVMJjEw3WDKIVgVjOIWqkow8jMqMfRg-MZ27y5YVt0UMjvFDiYmgt3RMMGBEpGA28iFlapjy8aJp8P6VRvgqvSL4NEr5maZnwdXRcx_NIB1F-3Z6vov-RGue3OLyVg8JrDF_X-Zd8FY0TI5GSevwatXqctrC4bPAoNcLJyAbYKq4ZX8t8RceLA6nFA4vLwNyU3uDO0tcd3JR2oESFKiByXuIglWmBak1cAkBQTP6sVVV3q-9sVFUSllm2n4KcdqRhx9_9EeWDxcbNUGTTIYJdniVBqoxoQK7J_-At6FGpUJ6UbDVMMdRCqQkd4XpwskE8HrGmBODh2dHIMr6j_--seGikPSrRsmI_C46Ds3czJVoXppywXodorhFMDGyC58r-ANg7PJKfA-Sv8eC_Ao_enJrfRojJ4Ne-j--9Z7u4pNfml4HGfx60eZqW79GYIQ2RzRk6jW8wWfTh5GSu2L8vWgdretgpodu5E9w3A8Yf6KFmcGD8cK1GNalDVNcJRJ8cRD2VcoimJhxRZQpN-EcLoStf5efOKBysaa3oGzxJ66PKCl130XHUGlXkO4uuM6ph6T6GCHvpo7B1LmTK6BYESynEuhMWqmkcqKaqcKsGcK0BjK_FvThU5_VcJ758Ea5nU3HilF7l9A-8E4sVcfaWCSQJLFLTudaOyqJ4vU6D9fy99fus-2HiaZbt_D-LYeb5e7YXzTZtNulGLHCbFKucJ5t8tVp0W0xWSd1UddEUeZrmabrBDI9FtllnYhNvmoXc8phncRZznsTxKl1mTbHJOU-qo6iqYn1kqxh7IdWSqFka2y7CrWebpOt0lS1CartwkeO8GtvpW2Kc11a4LjI6OgklmzfxfC_4-PJMomy_sFsSRdXYOraKlXTe3Vx56RVub-2euvNoEc7Sd3DNuMVo1bbzfnDERMjlVvpurJa1CTec-aJDbgZr_o813SCvd7fDfJDTlv8RAAD__8K9GAw">