[clang] [llvm] [LICM] Sink unused l-invariant loads in preheader. (PR #157559)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 25 05:51:34 PDT 2025
nikic wrote:
Crash reproducer:
```llvm
; RUN: opt -S -passes="loop-mssa(loop-simplifycfg,licm<no-allowspeculation>,loop-rotate,simple-loop-unswitch)" < %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 void @_ZN4ncnnL8rnn_int8ERKNS_3MatERS0_iS2_PKfS2_S2_S5_S3_RKNS_6OptionE.omp_outlined(ptr %0) {
%2 = alloca i32, align 4
call void @llvm.lifetime.start.p0(ptr %2)
br label %3
3: ; preds = %5, %1
%4 = load i32, ptr null, align 4
br label %.preheader
.preheader: ; preds = %7, %3
%.049 = phi i32 [ %8, %7 ], [ 0, %3 ]
br i1 false, label %7, label %5
5: ; preds = %.preheader
%6 = load ptr, ptr %0, align 8
store float 0.000000e+00, ptr %6, align 4
br label %3
7: ; preds = %.preheader
%8 = add i32 0, 0
br label %.preheader
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(ptr captures(none)) #0
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
```
```
opt: /home/npopov/repos/llvm-project/llvm/include/llvm/Support/GenericDomTree.h:403: DomTreeNodeBase<NodeT> *llvm::DominatorTreeBase<llvm::BasicBlock, false>::getNode(const NodeT *) const [NodeT = llvm::BasicBlock, IsPostDom = false]: Assertion `(!BB || Parent == NodeTrait::getParent(const_cast<NodeT *>(BB))) && "cannot get DomTreeNode of block with different parent"' 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: build/bin/opt -S -passes=loop-mssa(loop-simplifycfg,licm<no-allowspeculation>,loop-rotate,simple-loop-unswitch) test.ll
1. Running pass "function(loop-mssa(loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<header-duplication;no-prepare-for-lto>,simple-loop-unswitch<no-nontrivial;trivial>))" on module "test.ll"
2. Running pass "loop-mssa(loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<header-duplication;no-prepare-for-lto>,simple-loop-unswitch<no-nontrivial;trivial>)" on function "_ZN4ncnnL8rnn_int8ERKNS_3MatERS0_iS2_PKfS2_S2_S5_S3_RKNS_6OptionE.omp_outlined"
#0 0x0000000004a159f8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build/bin/opt+0x4a159f8)
#1 0x0000000004a12fc5 llvm::sys::RunSignalHandlers() (build/bin/opt+0x4a12fc5)
#2 0x0000000004a16a91 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007f149ea28bb0 __restore_rt (/lib64/libc.so.6+0x19bb0)
#4 0x00007f149ea8209c __pthread_kill_implementation (/lib64/libc.so.6+0x7309c)
#5 0x00007f149ea28a7e gsignal (/lib64/libc.so.6+0x19a7e)
#6 0x00007f149ea106d0 abort (/lib64/libc.so.6+0x16d0)
#7 0x00007f149ea10639 __assert_perror_fail (/lib64/libc.so.6+0x1639)
#8 0x000000000501d649 llvm::DominatorTreeBase<llvm::BasicBlock, false>::dominates(llvm::BasicBlock const*, llvm::BasicBlock const*) const (build/bin/opt+0x501d649)
#9 0x00000000052b1208 (anonymous namespace)::ClobberWalker::findClobber(llvm::BatchAAResults&, llvm::MemoryAccess*, (anonymous namespace)::UpwardsMemoryQuery&, unsigned int&) MemorySSA.cpp:0:0
#10 0x00000000052b2887 llvm::MemorySSA::ClobberWalkerBase::getClobberingMemoryAccessBase(llvm::MemoryAccess*, llvm::BatchAAResults&, unsigned int&, bool, bool) (build/bin/opt+0x52b2887)
#11 0x00000000052b6c05 llvm::MemorySSA::SkipSelfWalker::getClobberingMemoryAccess(llvm::MemoryAccess*, llvm::BatchAAResults&) MemorySSA.cpp:0:0
#12 0x00000000053f55a8 pointerInvalidatedByLoop(llvm::MemorySSA*, llvm::MemoryUse*, llvm::Loop*, llvm::Instruction&, llvm::SinkAndHoistLICMFlags&, bool) LICM.cpp:0:0
#13 0x00000000053ee957 llvm::canSinkOrHoistInst(llvm::Instruction&, llvm::AAResults*, llvm::DominatorTree*, llvm::Loop*, llvm::MemorySSAUpdater&, bool, llvm::SinkAndHoistLICMFlags&, llvm::OptimizationRemarkEmitter*) (build/bin/opt+0x53ee957)
```
https://github.com/llvm/llvm-project/pull/157559
More information about the llvm-commits
mailing list