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