Skip to content

Crash in SROA when using single-element vectors #139718

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
mshelego opened this issue May 13, 2025 · 0 comments
Open

Crash in SROA when using single-element vectors #139718

mshelego opened this issue May 13, 2025 · 0 comments
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:optimizations

Comments

@mshelego
Copy link

Revision: a4186bd
Input:

define void @test(<1 x ptr> %arg) {
   %1 = alloca <1 x ptr>
   store <1 x ptr> %arg, ptr %1
   %2 = load ptr addrspace(999), ptr %1
   ret void
 }

Command:

opt -passes=sroa input.ll -S

Output:

opt: /src/llvm-project/llvm/lib/IR/Instructions.cpp:3037: static llvm::CastInst* llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*,
const llvm::Twine&, llvm::InsertPosition): Assertion `castIsValid(op, S, Ty) && "Invalid cast!"' failed.
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=sroa test.ll -S
1.      Running pass "function(sroa<modify-cfg>)" on module "test.ll"
2.      Running pass "sroa<modify-cfg>" on function "test"
#0 0x0000793ac04f3e46 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /src/llvm-project/llvm/lib/Support/Unix/Signals.inc:804:22
#1 0x0000793ac04f42cf PrintStackTraceSignalHandler(void*) /src/llvm-project/llvm/lib/Support/Unix/Signals.inc:888:1
#2 0x0000793ac04f160b llvm::sys::RunSignalHandlers() /src/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#3 0x0000793ac04f36c8 SignalHandler(int, siginfo_t*, void*) /src/llvm-project/llvm/lib/Support/Unix/Signals.inc:418:13
#4 0x0000793abe845330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x0000793abe89eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x0000793abe89eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#7 0x0000793abe89eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#8 0x0000793abe84527e raise ./signal/../sysdeps/posix/raise.c:27:6
#9 0x0000793abe8288ff abort ./stdlib/abort.c:81:7
#10 0x0000793abe82881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x0000793abe83b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#12 0x0000793ac083db37 llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*, llvm::Twine const&, llvm::InsertPosition) /src/llvm-projec
t/llvm/lib/IR/Instructions.cpp:3039:11
#13 0x0000793ac05c0805 llvm::IRBuilderBase::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*, llvm::Twine const&, llvm::MDNode*, llvm::FMFSource) /user/mshel
ego/src/llvm-project/llvm/include/llvm/IR/IRBuilder.h:2241:55
#14 0x0000793ac066e1cc llvm::IRBuilderBase::CreateIntToPtr(llvm::Value*, llvm::Type*, llvm::Twine const&) /src/llvm-project/llvm/include/llvm/IR/IRBuilder.h:21
97:22
#15 0x0000793ac2b477b2 convertValue(llvm::DataLayout const&, llvm::IRBuilder<llvm::ConstantFolder, (anonymous namespace)::IRBuilderPrefixedInserter>&, llvm::Value*, [0/1874]
pe*) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA.cpp:2035:38
#16 0x0000793ac2b4cec0 (anonymous namespace)::AllocaSliceRewriter::visitLoadInst(llvm::LoadInst&) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA.cpp:2953:21
#17 0x0000793ac2b698c5 llvm::InstVisitor<(anonymous namespace)::AllocaSliceRewriter, bool>::visitLoad(llvm::LoadInst&) /src/llvm-project/llvm/include/llvm/IR/I
nstruction.def:172:1
#18 0x0000793ac2b64177 llvm::InstVisitor<(anonymous namespace)::AllocaSliceRewriter, bool>::visit(llvm::Instruction&) /src/llvm-project/llvm/include/llvm/IR/In
struction.def:172:1
#19 0x0000793ac2b5fc13 llvm::InstVisitor<(anonymous namespace)::AllocaSliceRewriter, bool>::visit(llvm::Instruction*) /src/llvm-project/llvm/include/llvm/IR/In
stVisitor.h:111:52
#20 0x0000793ac2b4ba42 (anonymous namespace)::AllocaSliceRewriter::visit((anonymous namespace)::Slice const*) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA
.cpp:2761:13
#21 0x0000793ac2b59223 (anonymous namespace)::SROA::rewritePartition(llvm::AllocaInst&, (anonymous namespace)::AllocaSlices&, (anonymous namespace)::Partition&) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA.cpp:4945:16
#22 0x0000793ac2b5a9f5 (anonymous namespace)::SROA::splitAlloca(llvm::AllocaInst&, (anonymous namespace)::AllocaSlices&) /src/llvm-project/llvm/lib/Transforms/
Scalar/SROA.cpp:5340:45
#23 0x0000793ac2b5be98 (anonymous namespace)::SROA::runOnAlloca(llvm::AllocaInst&) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA.cpp:5640:11
#24 0x0000793ac2b5c905 (anonymous namespace)::SROA::runSROA(llvm::Function&) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA.cpp:5749:22
#25 0x0000793ac2b5cd98 llvm::SROAPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /src/llvm-project/llvm/lib/Transforms/Scalar/SROA.cpp:5789:
60
#26 0x0000793ac7c5d963 llvm::detail::PassModel<llvm::Function, llvm::SROAPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Funct
ion>&) /src/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:92:3
#27 0x0000793ac092c85d llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /
src/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:85:18
#28 0x0000793ac55f4dcb llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function
>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /src/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:92:3
#29 0x0000793ac092b178 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /src/llvm-project/llvm/lib/IR/PassManager.cp
p:129:23
#30 0x0000793ac55f4b45 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManage
r<llvm::Module>&) /src/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:92:3
#31 0x0000793ac092c489 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /src/llvm
-project/llvm/include/llvm/IR/PassManagerImpl.h:85:18
#32 0x0000644a3dcfb791 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_t
ool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) /src/llvm-project/llvm/tools/opt/NewPMDriver.cpp:557:10
#33 0x0000644a3dcccfdc optMain /src/llvm-project/llvm/tools/opt/optdriver.cpp:729:27
#34 0x0000644a3dcca761 main /src/llvm-project/llvm/tools/opt/opt.cpp:25:64
#35 0x0000793abe82a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#36 0x0000793abe82a28b call_init ./csu/../csu/libc-start.c:128:20
#37 0x0000793abe82a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#38 0x0000644a3dcca645 _start (./bin/opt+0x1d645)
Aborted (core dumped)
@EugeneZelenko EugeneZelenko added llvm:optimizations crash Prefer [crash-on-valid] or [crash-on-invalid] and removed new issue labels May 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:optimizations
Projects
None yet
Development

No branches or pull requests

3 participants