[Polly] Crash in LazyValueInfo after Polly passes: "Unknown live-in to the entry block"
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
Reproducer on Compiler Explorer: https://godbolt.org/z/c5xfbzb5r
When compiling a fuzzer-generated test case with Polly optimization flags(`-O3 -mllvm -polly -mllvm -polly-process-unprofitable`), the compiler triggers an assertion failure in `LazyValueInfo` during the `jump-threading` pass.
This issue was automatically generated by a fuzzer and was reduced by CReduce.
Compiler Version:
```
clang version 24.0.0git (https://github.com/llvm/llvm-project.git 20667a67e6a47351dcf29acc5b4fb68d580ed6cf)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin
Build config: +assertions
Found candidate GCC installation: /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/17.0.0
Selected GCC installation: /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/17.0.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
```
Source Code:
```c
int a;
void b(int c, int d[]) {
for (_Bool e;;)
for (short f;;)
for (char g; g < 2; g += 4)
for (short h = 0; h < (unsigned short)c - 42761; h += 1)
a = 2 ? d[e][f][e] : 0;
}
```
Build Command:
```bash
clang -O3 example.c -mllvm -polly -mllvm -polly-process-unprofitable
```
Stack Trace:
```
clang-24: /root/llvm-project/llvm/lib/Analysis/LazyValueInfo.cpp:743: std::optional llvm::LazyValueInfoImpl::solveBlockValueNonLocal(llvm::Value*, llvm::BasicBlock*): Assertion `isa(Val) && "Unknown live-in to the entry block"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and dumped files.
Stack dump:
0. Program arguments: /cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24 -cc1 -triple x86_64-unknown-linux-gnu -O3 -emit-obj -dumpdir /app/output.s- -disable-free -clear-ast-before-backend -main-file-name example.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -fno-verbose-asm -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -gkey-instructions -debug-info-kind=constructor -dwarf-version=5 -debugger-tuning=gdb -fdebug-compilation-dir=/app -fcoverage-compilation-dir=/app -resource-dir /cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/lib/clang/24 -internal-isystem /cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/lib/clang/24/include -internal-isystem /cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/../include/x86_64-unknown-linux-gnu -internal-isystem /usr/local/include -internal-isystem /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/17.0.0/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcolor-diagnostics -vectorize-loops -vectorize-slp -mllvm -polly -mllvm -polly-process-unprofitable -faddrsig -fdwarf2-cfi-asm -o /tmp/example-526605.o -x c
1. parser at end of file
2. Optimizer
3. Running pass "function(drop-unnecessary-assumes,float2int,lower-constant-intrinsics,chr,polly,sroa,early-cse,speculative-execution,jump-threading,correlated-propagation,jump-table-to-switch,simplifycfg,instcombine,aggressive-instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm,loop-rotate,licm,simple-loop-unswitch),simplifycfg,instcombine,loop(loop-idiom,indvars,extra-simple-loop-unswitch-passes,loop-deletion,loop-unroll-full),sroa,vector-combine,mldst-motion,gvn<>,sccp,bdce,instcombine,dfa-jump-threading,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm),coro-elide,simplifycfg,instcombine,loop(loop-rotate,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize,drop-unnecessary-assumes,infer-alignment,loop-load-elim,instcombine,simplifycfg,slp-vectorizer,vector-combine,instcombine,loop-unroll,transform-warning,sroa,infer-alignment,instcombine,loop-mssa(licm),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,mergeicmps,expand-memcmp,tailcallelim,simplifycfg)" on module ""
4. Running pass "correlated-propagation" on function "b"
#0 0x0000000004442908 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x4442908)
#1 0x000000000443f7b4 llvm::sys::RunSignalHandlers() (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x443f7b4)
#2 0x000000000443f92e SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x000000000443f9d8 SignalHandlerTerminate(int, siginfo_t*, void*) Signals.cpp:0:0
#4 0x0000732b4a045330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x0000732b4a09ec0c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9ec0c)
#6 0x0000732b4a04527e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#7 0x0000732b4a0288ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#8 0x0000732b4a02881b (/lib/x86_64-linux-gnu/libc.so.6+0x2881b)
#9 0x0000732b4a03b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#10 0x00000000032ea4d3 llvm::LazyValueInfoImpl::solveBlockValueNonLocal(llvm::Value*, llvm::BasicBlock*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x32ea4d3)
#11 0x00000000032ea51a llvm::LazyValueInfoImpl::solveBlockValueImpl(llvm::Value*, llvm::BasicBlock*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x32ea51a)
#12 0x00000000032ea864 llvm::LazyValueInfoImpl::solveBlockValue(llvm::Value*, llvm::BasicBlock*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x32ea864)
#13 0x00000000032eaa70 llvm::LazyValueInfoImpl::solve() (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x32eaa70)
#14 0x00000000032ec518 llvm::LazyValueInfoImpl::getValueOnEdge(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Instruction*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x32ec518)
#15 0x00000000032ed074 llvm::LazyValueInfo::getConstantOnEdge(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::Instruction*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x32ed074)
#16 0x00000000089cbd2b processPHI(llvm::PHINode*, llvm::LazyValueInfo*, llvm::DominatorTree*, llvm::SimplifyQuery const&) CorrelatedValuePropagation.cpp:0:0
#17 0x00000000089ce326 runImpl(llvm::Function&, llvm::LazyValueInfo*, llvm::DominatorTree*, llvm::SimplifyQuery const&) CorrelatedValuePropagation.cpp:0:0
#18 0x00000000089cfe0a llvm::CorrelatedValuePropagationPass::run(llvm::Function&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x89cfe0a)
#19 0x00000000057dac2e llvm::detail::PassModel>::runImpl(llvm::detail::PassConcept>&, llvm::Function&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x57dac2e)
#20 0x0000000003d7adf4 llvm::PassManager>::run(llvm::Function&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x3d7adf4)
#21 0x000000000128f8de llvm::detail::PassModel>, llvm::AnalysisManager>::runImpl(llvm::detail::PassConcept>&, llvm::Function&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x128f8de)
#22 0x0000000003d79853 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x3d79853)
#23 0x000000000128f97e llvm::detail::PassModel>::runImpl(llvm::detail::PassConcept>&, llvm::Module&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x128f97e)
#24 0x0000000003d78ea4 llvm::PassManager>::run(llvm::Module&, llvm::AnalysisManager&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x3d78ea4)
#25 0x000000000485ca6c (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr>&, std::unique_ptr>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#26 0x000000000485ebd3 (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr>, clang::BackendConsumer*) BackendUtil.cpp:0:0
#27 0x0000000004861843 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr, std::unique_ptr>, clang::BackendConsumer*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x4861843)
#28 0x0000000004f3643c clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x4f3643c)
#29 0x0000000006d4c0dc clang::ParseAST(clang::Sema&, bool, bool) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x6d4c0dc)
#30 0x0000000004f36868 clang::CodeGenAction::ExecuteAction() (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x4f36868)
#31 0x0000000005262bf8 clang::FrontendAction::Execute() (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x5262bf8)
#32 0x00000000051efe0d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x51efe0d)
#33 0x00000000053384cd clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0x53384cd)
#34 0x0000000000dadd8c cc1_main(llvm::ArrayRef, char const*, void*) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0xdadd8c)
#35 0x0000000000da49aa ExecuteCC1Tool(llvm::SmallVectorImpl&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr) driver.cpp:0:0
#36 0x0000000000da8eab clang_main(int, char**, llvm::ToolContext const&) (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0xda8eab)
#37 0x0000000000cc5f0a main (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0xcc5f0a)
#38 0x0000732b4a02a1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#39 0x0000732b4a02a28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#40 0x0000000000da4355 _start (/cefs/80/80324b5cb559c56dab46561b_clang-assertions-trunk-20260808/bin/clang-24+0xda4355)
clang: error: unable to execute command: Aborted (core dumped)
clang: error: clang frontend command failed with exit code -2 (use -v to see invocation)
```
Contributor guide
Research direction
Start by compiling the reduced example.c reproducer with clang -O3 -mllvm -polly -mllvm -polly-process-unprofitable and confirm the assertion. Read llvm/lib/Analysis/LazyValueInfo.cpp around solveBlockValueNonLocal and CorrelatedValuePropagation.cpp around processPHI, then trace the failing pass interaction. Done means the reproducer no longer triggers the assertion and regression coverage is added if the relevant test location is identified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100