<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">