Issue 138345
Summary Assertion failure with gvn-sink
Labels bug, crash-on-valid, llvm:GVN
Assignees
Reporter ilovepi
    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));
 }
}
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to