[llvm] [InstCombine] Forward memcpy source to load instruction (PR #140249)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sat May 17 00:47:33 PDT 2025


https://github.com/dtcxzyw requested changes to this pull request.

Crash reproducer:
```
; bin/opt -passes=instcombine reduced.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-unknown-linux-gnu"

%struct.S0 = type { i32, i32, i16 }

@g_1092 = external global [1 x [4 x { i32, i32, i16, [2 x i8] }]]

define i8 @func_124(i32 %storemerge740) {
entry:
  br label %for.cond554

for.cond554:                                      ; preds = %for.cond554, %entry
  %idxprom578 = zext i32 %storemerge740 to i64
  %arrayidx584 = getelementptr [1 x [4 x %struct.S0]], ptr @g_1092, i64 0, i64 %idxprom578, i64 1
  %arrayidx589 = getelementptr [1 x [4 x %struct.S0]], ptr @g_1092, i64 0, i64 %idxprom578, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr %arrayidx584, ptr %arrayidx589, i64 12, i1 false)
  %f1597 = getelementptr [1 x [4 x %struct.S0]], ptr @g_1092, i64 0, i64 %idxprom578, i64 1, i32 1
  %0 = load i32, ptr %f1597, align 4
  %tobool598.not = icmp eq i32 %0, 0
  br i1 %tobool598.not, label %for.cond601, label %for.cond554

for.cond601:                                      ; preds = %for.cond554
  ret i8 0
}
```
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
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 "func_124"
 #0 0x0000780f1ca26032 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.21.0git+0x226032)
 #1 0x0000780f1ca22f0f llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.21.0git+0x222f0f)
 #2 0x0000780f1ca23054 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x0000780f1c445330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x0000780f13685421 llvm::Instruction::eraseFromParent() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x285421)
 #5 0x0000780f14e65666 llvm::InstCombinerImpl::eraseInstFromFunction(llvm::Instruction&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.21.0git+0x5c666)
 #6 0x0000780f14e6fc31 llvm::InstCombinerImpl::run() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.21.0git+0x66c31)
 #7 0x0000780f14e70f23 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
 #8 0x0000780f14e71f32 llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.21.0git+0x68f32)
 #9 0x0000780f16dac615 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.21.0git+0x1ac615)
#10 0x0000780f1372a624 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.21.0git+0x32a624)
#11 0x0000780f1b6db3c5 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.21.0git+0xdb3c5)
#12 0x0000780f13728f00 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x328f00)
#13 0x0000780f1b6dbd85 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/../lib/libLLVMX86CodeGen.so.21.0git+0xdbd85)
#14 0x0000780f137294f5 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.21.0git+0x3294f5)
#15 0x0000780f1cc652e9 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) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.21.0git+0x2c2e9)
#16 0x0000780f1cc70306 optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.21.0git+0x37306)
#17 0x0000780f1c42a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#18 0x0000780f1c42a28b call_init ./csu/../csu/libc-start.c:128:20
#19 0x0000780f1c42a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#20 0x0000567ad14d1095 _start (bin/opt+0x1095)
Segmentation fault (core dumped)
```

https://github.com/llvm/llvm-project/pull/140249


More information about the llvm-commits mailing list