Issue |
149919
|
Summary |
[SPIR-V] Unimplemented implicit down-cast error for `AddUint64` vec2 case
|
Labels |
new issue
|
Assignees |
|
Reporter |
kmpeng
|
Code that reproduces the error:
```hlsl
// RUN: %clang-dxc -spirv -fspv-target-env=vulkan1.3 -T cs_6_5 %s
StructuredBuffer<uint4> In : register(t0);
RWStructuredBuffer<uint4> Out : register(u1);
[numthreads(1,1,1)]
void main() {
Out[1].xy = AddUint64(In[1].xy, In[1].xy);
}
```
<br>
The crash is happening in `SPIRVLegalizePointerCast::transformLoad()`
https://github.com/llvm/llvm-project/blob/b66084acd9f6052ed9061ef4ec39e7c8a176f01d/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp#L148
on the load instruction `%HighA.i = load i32, ptr addrspace(11) %12, align 4` because `FromTy = i8` and `ToTy = i32`, which means `SAT`, `SVT`, `SST`, `DVT` are all `nullptr`.
<br>
Relevant IR dump:
```llvm
entry:
%0 = call i32 (...) @llvm.spv.const.composite.i32(i8 73, i8 110, i8 0)
%1 = call i32 @llvm.spv.track.constant.i32.i32(i32 %0, metadata [3 x i8] c"In\00")
call void @llvm.spv.assign.type.i32(i32 %1, metadata [3 x i8] poison)
call void @llvm.spv.init.global.p0.i32(ptr @.str, i32 %1)
%2 = call i32 (...) @llvm.spv.const.composite.i32(i8 79, i8 117, i8 116, i8 0)
%3 = call i32 @llvm.spv.track.constant.i32.i32(i32 %2, metadata [4 x i8] c"Out\00")
call void @llvm.spv.assign.type.i32(i32 %3, metadata [4 x i8] poison)
call void @llvm.spv.init.global.p0.i32(ptr @.str.2, i32 %3)
%"reg2mem alloca point" = call i32 @llvm.spv.bitcast.i32.i32(i32 0)
call void @llvm.spv.assign.name.i32(i32 %"reg2mem alloca point", metadata !3)
call void @llvm.spv.assign.type.i32(i32 %"reg2mem alloca point", metadata i32 poison)
%4 = tail call target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4i32_12_0t(i32 0, i32 0, i32 1, i32 0, i1 false, ptr nonnull @.str)
call void @llvm.spv.assign.type.tspirv.VulkanBuffer_a0v4i32_12_0t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) %4, metadata target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) poison)
%5 = tail call target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4i32_12_1t(i32 0, i32 1, i32 1, i32 0, i1 false, ptr nonnull @.str.2)
call void @llvm.spv.assign.type.tspirv.VulkanBuffer_a0v4i32_12_1t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) %5, metadata target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 1) poison)
%6 = tail call noundef align 16 dereferenceable(16) ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v4i32_12_0t(target("spirv.VulkanBuffer", [0 x <4 x i32>], 12, 0) %4, i32 1)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %6, metadata <4 x i32> poison, i32 11)
%7 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %6, metadata i32 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %7, metadata i32 poison, i32 11)
%8 = call ptr addrspace(11) (i1, ptr addrspace(11), ...) @llvm.spv.gep.p11.p11(i1 false, ptr addrspace(11) %6, i32 0, i32 0)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %8, metadata i32 poison, i32 11)
%9 = load i32, ptr addrspace(11) %8, align 16
call void @llvm.spv.assign.type.i32(i32 %9, metadata i32 poison)
%LowA.i = load i32, ptr addrspace(11) %7, align 16
call void @llvm.spv.assign.name.i32(i32 %9, metadata !4)
call void @llvm.spv.assign.type.i32(i32 %9, metadata i32 poison)
%10 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %6, metadata i8 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %6, metadata i8 poison, i32 11)
%11 = call ptr addrspace(11) (i1, ptr addrspace(11), ...) @llvm.spv.gep.p11.p11(i1 true, ptr addrspace(11) %6, i64 4)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %11, metadata i8 poison, i32 11)
%12 = call ptr addrspace(11) @llvm.spv.ptrcast.p11.p11(ptr addrspace(11) %11, metadata i32 poison, i32 11)
call void @llvm.spv.assign.ptr.type.p11(ptr addrspace(11) %12, metadata i32 poison, i32 11)
%HighA.i = load i32, ptr addrspace(11) %12, align 4
...
```
Crash stack:
```
Stack dump:
0. Program arguments: /home/kaitlinpeng/llvm-build-debug/bin/clang-dxc -spirv -fspv-target-env=vulkan1.3 -T cs_6_5 clang/test/CodeGenHLSL/builtins/TestFile.hlsl
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'clang/test/CodeGenHLSL/builtins/TestFile.hlsl'.
4. Running pass 'SPIRV legalize bitcast pass' on function '@main'
Process 64581 stopped and restarted: thread 1 received signal: SIGCHLD
#0 0x000055555d3a4211 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:834:11
#1 0x000055555d3a479b PrintStackTraceSignalHandler(void*) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:918:1
#2 0x000055555d3a24e6 llvm::sys::RunSignalHandlers() /home/kaitlinpeng/llvm-project/llvm/lib/Support/Signals.cpp:104:5
#3 0x000055555d3a3a8e llvm::sys::CleanupOnSignal(unsigned long) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:374:1
#4 0x000055555d2c6627 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
#5 0x000055555d2c6a15 CrashRecoverySignalHandler(int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
#6 0x00007ffff7845330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#7 0x00007ffff789eb2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
#8 0x00007ffff784527e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#9 0x00007ffff78288ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#10 0x000055555d2d16a0 llvm::install_out_of_memory_new_handler() /home/kaitlinpeng/llvm-project/llvm/lib/Support/ErrorHandling.cpp:225:0
#11 0x000055555b26c296 (anonymous namespace)::SPIRVLegalizePointerCast::transformLoad(llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, llvm::LoadInst*, llvm::Value*, llvm::Value*) /home/kaitlinpeng/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp:0:7
#12 0x000055555b26be47 (anonymous namespace)::SPIRVLegalizePointerCast::legalizePointerCast(llvm::IntrinsicInst*) /home/kaitlinpeng/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp:284:9
#13 0x000055555b26bb64 (anonymous namespace)::SPIRVLegalizePointerCast::runOnFunction(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp:338:28
#14 0x000055555cb30bda llvm::FPPassManager::runOnFunction(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1398:23
#15 0x000055555cb355b2 llvm::FPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1444:16
#16 0x000055555cb3148b (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1513:23
#17 0x000055555cb3100a llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:531:16
#18 0x000055555cb35891 llvm::legacy::PassManager::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1640:3
#19 0x000055555e22ad04 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1260:19
#20 0x000055555e2246fe (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1286:7
#21 0x000055555e223be8 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1449:3
#22 0x000055555e24bc1f clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:316:3
#23 0x0000555561117978 clang::ParseAST(clang::Sema&, bool, bool) /home/kaitlinpeng/llvm-project/clang/lib/Parse/ParseAST.cpp:190:12
#24 0x000055555eb47a83 clang::ASTFrontendAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1344:1
#25 0x000055555e24fb70 clang::CodeGenAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1112:5
#26 0x000055555eb47466 clang::FrontendAction::Execute() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1226:7
#27 0x000055555ea6101e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/kaitlinpeng/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1056:23
#28 0x000055555ed4b647 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/kaitlinpeng/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:299:8
#29 0x000055555b0a1a78 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/kaitlinpeng/llvm-project/clang/tools/driver/cc1_main.cpp:297:13
#30 0x000055555b094792 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:223:5
#31 0x000055555b0952d0 clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(llvm::SmallVectorImpl<char const*>&) const /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:368:9
#32 0x000055555b09529d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#33 0x000055555e8bef11 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#34 0x000055555e8bbe88 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0::operator()() const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Job.cpp:436:34
#35 0x000055555e8bbe55 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#36 0x000055555beff6d9 llvm::function_ref<void ()>::operator()() const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#37 0x000055555d2c641a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:3
#38 0x000055555e8bb7eb clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Job.cpp:436:7
#39 0x000055555e8506d3 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Compilation.cpp:196:15
#40 0x000055555e8508d7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Compilation.cpp:251:13
#41 0x000055555e86d822 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/kaitlinpeng/llvm-project/clang/lib/Driver/Driver.cpp:2245:7
#42 0x000055555b094268 clang_main(int, char**, llvm::ToolContext const&) /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:406:9
#43 0x000055555b0c8b05 main /home/kaitlinpeng/llvm-build-debug/tools/clang/tools/driver/clang-driver.cpp:17:3
#44 0x00007ffff782a1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#45 0x00007ffff782a28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#46 0x000055555b092f65 _start (/home/kaitlinpeng/llvm-build-debug/bin/clang-dxc+0x5b3ef65)
clang-dxc: error: clang frontend command failed with exit code 134 (use -v to see invocation)
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs