| Issue |
180258
|
| Summary |
[SPIRV] Crash in SPIRVLegalizePointerCast trying to legalize load of a phi node
|
| Labels |
backend:SPIR-V
|
| Assignees |
|
| Reporter |
farzonl
|
We seem to be mistakenly in `transformLoad` which seems to exist motly for vector and array transformations. When we try to get the type of the phi node (ie `FromTy` this is an `i8`. I assume thats just a place holder type for pointers. The `ToTy` (ie CastedOperand type) is an i32.
## Other useful information
This bug only presents itself when we use GroupThreadId for indexing resource buffers. If we instead index with a for loop everything works fine.
## repro
https://godbolt.org/z/EPc4sfx58
## LLDB results
```gdb
(lldb) frame select 4
frame #4: 0x00000001001e5cfc clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::transformLoad(this=0x000000014bf545f0, B=0x000000016fdf3b10, LI=0x000000014bf370a0, CastedOperand=0x000000014bf6d780, OriginalOperand=0x000000014bf6bda8) at SPIRVLegalizePointerCast.cpp:229:7
226 else if (SAT && DVT && SAT->getElementType() == DVT->getElementType())
227 Output = loadVectorFromArray(B, DVT, OriginalOperand);
228 else
-> 229 llvm_unreachable("Unimplemented implicit down-cast from load.");
230
231 GR->replaceAllUsesWith(LI, Output, /* DeleteOld= */ true);
232 DeadInstructions.push_back(LI);
(lldb) expr LI->dump()
%14 = load i32, ptr addrspace(11) %13, align 4
(lldb) expr LI->getPointerOperand()->dump()
%13 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %.sink.reg2mem.0, metadata i32 poison, i32 11)
(lldb) expr LI->getParent()->dump()
sw.epilog23.i.sink.split: ; preds = %new.header.new.exit
%13 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %.sink.reg2mem.0, metadata i32 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %13, metadata i32 poison, i32 11)
%14 = load i32, ptr addrspace(11) %13, align 4
call void @llvm.spv.assign.type.i32(i32 %14, metadata i32 poison)
call void @llvm.spv.assign.type.v16i32(<16 x i32> poison, metadata <16 x i32> poison)
%15 = call <16 x i32> @llvm.spv.insertelt.v16i32.v16i32.i32.i64(<16 x i32> poison, i32 %14, i64 0)
call void @llvm.spv.assign.type.v16i32(<16 x i32> %15, metadata <16 x i32> poison)
call void @llvm.spv.assign.type.v16i32(<16 x i32> poison, metadata <16 x i32> poison)
%16 = shufflevector <16 x i32> %15, <16 x i32> poison, <4 x i32> zeroinitializer
call void @llvm.spv.assign.type.v4i32(<4 x i32> %16, metadata <4 x i32> poison)
br label %sw.epilog23.i
(lldb) expr CastedOperand->dump()
%13 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %.sink.reg2mem.0, metadata i32 poison, i32 11)
(lldb) expr OriginalOperand->dump()
%.sink.reg2mem.0 = phi ptr addrspace(11) [ undef, %entry.sw.epilog23.i_crit_edge ], [ %11, %sw.epilog.i.thread ], [ %10, %sw.epilog.i.thread5 ], [ %9, %sw.epilog.i.thread10 ], [ %8, %sw.epilog.i.thread15 ]
(lldb) expr FromTy->dump()
i8
(lldb) expr ToTy->dump()
i32
```
## Crash stack
```
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
* frame #0: 0x000000019c20e388 libsystem_kernel.dylib`__pthread_kill + 8
frame #1: 0x000000019c247848 libsystem_pthread.dylib`pthread_kill + 296
frame #2: 0x000000019c1509e4 libsystem_c.dylib`abort + 124
frame #3: 0x000000010339008c clang-dxc`llvm::llvm_unreachable_internal(msg="Unimplemented implicit down-cast from load.", file="/Users/farzonlotfi/Projects/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp", line=229) at ErrorHandling.cpp:244:3
frame #4: 0x00000001001e5cfc clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::transformLoad(this=0x000000014bf545f0, B=0x000000016fdf3b10, LI=0x000000014bf370a0, CastedOperand=0x000000014bf6d780, OriginalOperand=0x000000014bf6bda8) at SPIRVLegalizePointerCast.cpp:229:7
frame #5: 0x00000001001e4104 clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::legalizePointerCast(this=0x000000014bf545f0, II=0x000000014bf6d780) at SPIRVLegalizePointerCast.cpp:389:9
frame #6: 0x00000001001e3920 clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::runOnFunction(this=0x000000014bf545f0, F=0x000000014bf549b8) at SPIRVLegalizePointerCast.cpp:445:7
frame #7: 0x0000000102145a08 clang-dxc`llvm::FPPassManager::runOnFunction(this=0x000000014bf5c3d0, F=0x000000014bf549b8) at LegacyPassManager.cpp:1398:27
frame #8: 0x000000010214bcbc clang-dxc`llvm::FPPassManager::runOnModule(this=0x000000014bf5c3d0, M=0x000000014c028e00) at LegacyPassManager.cpp:1444:16
frame #9: 0x000000010214628c clang-dxc`(anonymous namespace)::MPPassManager::runOnModule(this=0x000000014bf597d0, M=0x000000014c028e00) at LegacyPassManager.cpp:1513:27
frame #10: 0x0000000102145e10 clang-dxc`llvm::legacy::PassManagerImpl::run(this=0x000000014caa8600, M=0x000000014c028e00) at LegacyPassManager.cpp:531:44
frame #11: 0x000000010214c0c4 clang-dxc`llvm::legacy::PassManager::run(this=0x000000016fdf4310, M=0x000000014c028e00) at LegacyPassManager.cpp:1640:14
frame #12: 0x0000000103f6fcf8 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(this=0x000000016fdf4898, Action="" OS=llvm::raw_pwrite_stream @ 0x000000014be13790, DwoOS=nullptr) at BackendUtil.cpp:1277:19
frame #13: 0x0000000103f5fc5c clang-dxc`(anonymous namespace)::EmitAssemblyHelper::emitAssembly(this=0x000000016fdf4898, Action="" OS=llvm::raw_pwrite_stream @ 0x000000014be13790, BC=0x000000014be13840) at BackendUtil.cpp:1301:3
frame #14: 0x0000000103f5f11c clang-dxc`clang::emitBackendOutput(CI=0x000000014bf11510, CGOpts=0x000000014c816618, TDesc=(Data = "" Length = 98), M=0x000000014c028e00, Action="" VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x000000016fdf4ba8, OS=nullptr, BC=0x000000014be13840) at BackendUtil.cpp:1473:13
frame #15: 0x0000000104743b7c clang-dxc`clang::BackendConsumer::HandleTranslationUnit(this=0x000000014be13840, C=0x000000014c01f600) at CodeGenAction.cpp:310:3
frame #16: 0x0000000106ea3cac clang-dxc`clang::ParseAST(S=0x000000014c042000, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:183:13
frame #17: 0x00000001051454d0 clang-dxc`clang::ASTFrontendAction::ExecuteAction(this=0x000000014be07200) at FrontendAction.cpp:1433:3
frame #18: 0x0000000104749690 clang-dxc`clang::CodeGenAction::ExecuteAction(this=0x000000014be07200) at CodeGenAction.cpp:1107:30
frame #19: 0x00000001051457a4 clang-dxc`clang::WrapperFrontendAction::ExecuteAction(this=0x000000014be081a0) at FrontendAction.cpp:1465:18
frame #20: 0x0000000105168fc4 clang-dxc`clang::HLSLFrontendAction::ExecuteAction(this=0x000000014be081a0) at FrontendActions.cpp:1325:35
frame #21: 0x0000000105144ce0 clang-dxc`clang::FrontendAction::Execute(this=0x000000014be081a0) at FrontendAction.cpp:1313:3
frame #22: 0x0000000105050094 clang-dxc`clang::CompilerInstance::ExecuteAction(this=0x000000014bf11510, Act=0x000000014be081a0) at CompilerInstance.cpp:1007:33
frame #23: 0x000000010529a430 clang-dxc`clang::ExecuteCompilerInvocation(Clang=0x000000014bf11510) at ExecuteCompilerInvocation.cpp:310:25
frame #24: 0x00000001000152ec clang-dxc`cc1_main(Argv=ArrayRef<const char *> @ 0x000000016fdf5f18, Argv0="/Users/farzonlotfi/Projects/builds/llvm_debug_offload/bin/clang-23", MainAddr=0x0000000100005dd0) at cc1_main.cpp:304:15
frame #25: 0x00000001000077b4 clang-dxc`ExecuteCC1Tool(ArgV=0x000000016fdf9848, ToolContext=0x000000016fdfe808, VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x000000016fdf9648) at driver.cpp:226:12
frame #26: 0x0000000100013cdc clang-dxc`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=0x000000016fdfa390, ArgV=0x000000016fdf9848) const at driver.cpp:376:12
frame #27: 0x0000000100013c88 clang-dxc`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=6171894672, params=0x000000016fdf9848) at STLFunctionalExtras.h:46:12
frame #28: 0x0000000104d44890 clang-dxc`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=0x000000016fdfaa28, params=0x000000016fdf9848) const at STLFunctionalExtras.h:69:12
frame #29: 0x0000000104d44850 clang-dxc`clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0::operator()(this=0x000000016fdf97a0) const at Job.cpp:442:34
frame #30: 0x0000000104d4481c clang-dxc`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(callable=6171891616) at STLFunctionalExtras.h:46:12
frame #31: 0x00000001012e1584 clang-dxc`llvm::function_ref<void ()>::operator()(this=0x000000016fdf9738) const at STLFunctionalExtras.h:69:12
frame #32: 0x000000010337b0c4 clang-dxc`llvm::CrashRecoveryContext::RunSafely(this=0x000000016fdf97e0, Fn=function_ref<void ()> @ 0x000000016fdf9738) at CrashRecoveryContext.cpp:426:3
frame #33: 0x0000000104d40d50 clang-dxc`clang::driver::CC1Command::Execute(this=0x000000014bf0e6a0, Redirects=ArrayRef<std::__1::optional<llvm::StringRef> > @ 0x000000016fdf9830, ErrMsg="", ExecutionFailed=0x000000016fdf9d3f) const at Job.cpp:442:12
frame #34: 0x0000000104cc7650 clang-dxc`clang::driver::Compilation::ExecuteCommand(this=0x000000014bf0cea0, C=0x000000014bf0e6a0, FailingCommand=0x000000016fdf9e58, LogOnly=false) const at Compilation.cpp:196:15
frame #35: 0x0000000104cc78e0 clang-dxc`clang::driver::Compilation::ExecuteJobs(this=0x000000014bf0cea0, Jobs=0x000000014bf0cf20, FailingCommands=0x000000016fdfa700, LogOnly=false) const at Compilation.cpp:246:19
frame #36: 0x0000000104cf243c clang-dxc`clang::driver::Driver::ExecuteCompilation(this=0x000000016fdfa750, C=0x000000014bf0cea0, FailingCommands=0x000000016fdfa700) at Driver.cpp:2278:5
frame #37: 0x0000000100006efc clang-dxc`clang_main(Argc=7, Argv=0x000000016fdfef48, ToolContext=0x000000016fdfe808) at driver.cpp:414:21
frame #38: 0x0000000100041aec clang-dxc`main(argc=7, argv=0x000000016fdfef48) at clang-driver.cpp:17:10
frame #39: 0x000000019bea6b98 dyld`start + 6076
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs