[llvm] [InstCombinePHI] Enhance PHI CSE to remove redundant phis (PR #163453)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 17 10:57:10 PDT 2025
dtcxzyw wrote:
Crash reproducer:
```
; bin/opt -passes=instcombine test.ll -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-pc-linux-gnu"
define fastcc i32 @vduse_queue_check_inflights() {
._crit_edge:
br label %.lr.ph54
.lr.ph54:
%0 = phi ptr [ null, %._crit_edge ], [ %3, %.lr.ph54 ]
%1 = phi ptr [ %3, %.lr.ph54 ], [ null, %._crit_edge ]
%2 = load i8, ptr %1, align 8
%.not51 = icmp eq i8 %2, 0
%3 = select i1 %.not51, ptr %0, ptr null
br label %.lr.ph54
}
```
```
opt: /home/dtcxzyw/WorkSpace/Projects/compilers/llvm-project/llvm/include/llvm/IR/Instructions.h:2817: llvm::Value* llvm::PHINode::getIncomingValueForBlock(const llvm::BasicBlock*) const: Assertion `Idx >= 0 && "Invalid basic block argument!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: bin/opt -passes=instcombine reduced.ll -S
1. Running pass "function(instcombine<max-iterations=1;verify-fixpoint>)" on module "reduced.ll"
2. Running pass "instcombine<max-iterations=1;verify-fixpoint>" on function "vduse_queue_check_inflights"
#0 0x000071702d854192 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.22.0git+0x254192)
#1 0x000071702d85075f llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.22.0git+0x25075f)
#2 0x000071702d8508ac SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x000071702d245330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x000071702d29eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x000071702d29eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x000071702d29eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x000071702d24527e raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x000071702d2288ff abort ./stdlib/abort.c:81:7
#9 0x000071702d22881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000071702d23b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x0000717027c38c4a llvm::PHINode::getIncomingValueForBlock(llvm::BasicBlock const*) const (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.22.0git+0x38c4a)
#12 0x0000717027d5bfa9 llvm::InstCombinerImpl::visitPHINode(llvm::PHINode&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.22.0git+0x15bfa9)
#13 0x0000717027c68ff8 llvm::InstCombinerImpl::run() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.22.0git+0x68ff8)
#14 0x0000717027c6a1c2 combineInstructionsOverFunction(llvm::Function&, llvm::InstructionWorklist&, llvm::AAResults*, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::BranchProbabilityInfo*, llvm::ProfileSummaryInfo*, llvm::InstCombineOptions const&) InstructionCombining.cpp:0:0
#15 0x0000717027c6b204 llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.22.0git+0x6b204)
#16 0x000071702a3a8ee5 llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libPolly.so.22.0git+0x1a8ee5)
#17 0x0000717026b2c299 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.22.0git+0x32c299)
#18 0x000071702cadd335 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.22.0git+0xdd335)
#19 0x0000717026b2a722 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.22.0git+0x32a722)
#20 0x000071702dad5285 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.22.0git+0x20285)
#21 0x0000717026b2af4d llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.22.0git+0x32af4d)
#22 0x000071702dae2261 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool, bool) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.22.0git+0x2d261)
#23 0x000071702daed436 optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.22.0git+0x38436)
#24 0x000071702d22a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#25 0x000071702d22a28b call_init ./csu/../csu/libc-start.c:128:20
#26 0x000071702d22a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#27 0x0000622cb7c80095 _start (bin/opt+0x1095)
Aborted (core dumped)
```
https://github.com/llvm/llvm-project/pull/163453
More information about the llvm-commits
mailing list