[SPIR-V] `frac`/`rsqrt`/`saturate` matrix intrinsics fail to legalize wide vectors
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
`frac`/`rsqrt`/`saturate` matrices fail to legalize when compiled to SPIR-V.
Example repro for `saturate`:
```hlsl
// clang-dxc -spirv -T cs_6_5 %s
StructuredBuffer In : register(t0);
RWStructuredBuffer Out : register(u1);
[numthreads(1,1,1)]
void main() {
float2x4 R24 = saturate(float2x4(In[0], In[1]));
Out[0] = R24[0];
Out[1] = R24[1];
}
```
```
fatal error: error in backend: unable to legalize instruction: %25:vfid(<8 x s32>) =
G_CONCAT_VECTORS %107:_(<4 x s32>), %108:_(<4 x s32>) (in function: main)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and dumped files.
Stack dump:
0. Program arguments: ../llvm-build-debug/bin/clang-dxc -spirv -T cs_6_5 clang/test/CodeGenHLSL/builtins/Test.hlsl
1. parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'clang/test/CodeGenHLSL/builtins/Test.hlsl'.
4. Running pass 'Legalizer' on function '@main'
#0 0x0000592efe671281 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:931:11
#1 0x0000592efe6717fb PrintStackTraceSignalHandler(void*) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:1013:1
#2 0x0000592efe66f3ff llvm::sys::RunSignalHandlers() /home/kaitlinpeng/llvm-project/llvm/lib/Support/Signals.cpp:108:5
#3 0x0000592efe6709f5 llvm::sys::CleanupOnSignal(unsigned long) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:422:1
#4 0x0000592efe587af7 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
#5 0x0000592efe587a18 llvm::CrashRecoveryContext::HandleExit(int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:460:3
#6 0x0000592efe66a7b3 llvm::sys::Process::Exit(int, bool) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Process.cpp:114:7
#7 0x0000592efbf451a6 (../llvm-build-debug/bin/clang-dxc+0x5d6f1a6)
#8 0x0000592efe594e19 llvm::report_fatal_error(llvm::Twine const&, bool) /home/kaitlinpeng/llvm-project/llvm/lib/Support/ErrorHandling.cpp:117:5
#9 0x0000592efe5950c7 /home/kaitlinpeng/llvm-project/llvm/lib/Support/ErrorHandling.cpp:156:3
#10 0x0000592f015d7f3f reportGISelDiagnostic(llvm::DiagnosticSeverity, llvm::MachineFunction&, llvm::MachineOptimizationRemarkEmitter&, llvm::MachineOptimizationRemarkMissed&) /home/kaitlinpeng/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp:252:5
#11 0x0000592f015d7f98 llvm::reportGISelFailure(llvm::MachineFunction&, llvm::MachineOptimizationRemarkEmitter&, llvm::MachineOptimizationRemarkMissed&) /home/kaitlinpeng/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp:266:1
#12 0x0000592f015d816c llvm::reportGISelFailure(llvm::MachineFunction&, llvm::MachineOptimizationRemarkEmitter&, char const*, llvm::StringRef, llvm::MachineInstr const&) /home/kaitlinpeng/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp:280:1
#13 0x0000592f01532174 runLegalizerOnMachineFunction(llvm::MachineFunction&, llvm::function_ref, llvm::function_ref, llvm::LibcallLoweringInfo const*) /home/kaitlinpeng/llvm-project/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp:360:5
#14 0x0000592f01531d97 llvm::LegalizerLegacy::runOnMachineFunction(llvm::MachineFunction&) /home/kaitlinpeng/llvm-project/llvm/lib/CodeGen/GlobalISel/Legalizer.cpp:392:8
#15 0x0000592efd130c4e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:96:8
#16 0x0000592efdb60dd0 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1416:23
#17 0x0000592efdb65a52 llvm::FPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1470:16
#18 0x0000592efdb61972 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1561:23
#19 0x0000592efdb6136a llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:533:16
#20 0x0000592efdb65d31 llvm::legacy::PassManager::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1697:3
#21 0x0000592eff601c90 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipelineLegacy(clang::BackendAction, std::unique_ptr>&, std::unique_ptr>&, llvm::CodeGenFileType)::$_0::operator()() const /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1292:58
#22 0x0000592eff601c65 void llvm::function_ref::callback_fn<(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipelineLegacy(clang::BackendAction, std::unique_ptr>&, std::unique_ptr>&, llvm::CodeGenFileType)::$_0>(long) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#23 0x0000592efce6c059 llvm::function_ref::operator()() const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#24 0x0000592eff601a7a (anonymous namespace)::EmitAssemblyHelper::TimeCodegenPasses(llvm::function_ref) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1341:3
#25 0x0000592eff6018a8 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipelineLegacy(clang::BackendAction, std::unique_ptr>&, std::unique_ptr>&, llvm::CodeGenFileType) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1293:1
#26 0x0000592eff5fbb87 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(clang::BackendAction, std::unique_ptr>&, std::unique_ptr>&) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1256:1
#27 0x0000592eff5f5537 (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr>, clang::BackendConsumer*) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1366:7
#28 0x0000592eff5f4225 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr, std::unique_ptr>, clang::BackendConsumer*) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1649:3
#29 0x0000592eff625666 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:322:3
#30 0x0000592f0273e4f4 clang::ParseAST(clang::Sema&, bool, bool) /home/kaitlinpeng/llvm-project/clang/lib/Parse/ParseAST.cpp:180:30
#31 0x0000592effecc043 clang::ASTFrontendAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1491:1
#32 0x0000592eff629ad0 clang::CodeGenAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1167:5
#33 0x0000592effecc292 clang::WrapperFrontendAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1522:1
#34 0x0000592efff180ce clang::HLSLFrontendAction::ExecuteAction() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendActions.cpp:1095:35
#35 0x0000592effecb9b6 clang::FrontendAction::Execute() /home/kaitlinpeng/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1373:7
#36 0x0000592effdde8b6 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/kaitlinpeng/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1040:23
#37 0x0000592f0004ef7b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/kaitlinpeng/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:332:8
#38 0x0000592efbf443cc cc1_main(llvm::ArrayRef, char const*, void*) /home/kaitlinpeng/llvm-project/clang/tools/driver/cc1_main.cpp:296:11
#39 0x0000592efbf3744c ExecuteCC1Tool(llvm::SmallVectorImpl&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr) /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:229:5
#40 0x0000592efbf37f91 clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(llvm::SmallVectorImpl&) const /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:379:12
#41 0x0000592efbf37f3d int llvm::function_ref&)>::callback_fn(long, llvm::SmallVectorImpl&) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#42 0x0000592effbc65b1 llvm::function_ref&)>::operator()(llvm::SmallVectorImpl&) const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#43 0x0000592effbc2f28 clang::driver::CC1Command::Execute(llvm::ArrayRef>, std::__cxx11::basic_string, std::allocator>*, bool*) const::$_0::operator()() const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Job.cpp:442:34
#44 0x0000592effbc2ef5 void llvm::function_ref::callback_fn>, std::__cxx11::basic_string, std::allocator>*, bool*) const::$_0>(long) /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#45 0x0000592efce6c059 llvm::function_ref::operator()() const /home/kaitlinpeng/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#46 0x0000592efe5878ea llvm::CrashRecoveryContext::RunSafely(llvm::function_ref) /home/kaitlinpeng/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:441:3
#47 0x0000592effbc2857 clang::driver::CC1Command::Execute(llvm::ArrayRef>, std::__cxx11::basic_string, std::allocator>*, bool*) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Job.cpp:442:7
#48 0x0000592effb38a53 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Compilation.cpp:202:15
#49 0x0000592effb38e4c clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl>&, bool) const /home/kaitlinpeng/llvm-project/clang/lib/Driver/Compilation.cpp:397:13
#50 0x0000592effb68fa2 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl>&) /home/kaitlinpeng/llvm-project/clang/lib/Driver/Driver.cpp:2422:7
#51 0x0000592efbf36eb4 clang_main(int, char**, llvm::ToolContext const&) /home/kaitlinpeng/llvm-project/clang/tools/driver/driver.cpp:419:9
#52 0x0000592efbf6a349 main /home/kaitlinpeng/llvm-build-debug/tools/clang/tools/driver/clang-driver.cpp:17:3
#53 0x00007f898022a1ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#54 0x00007f898022a28b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#55 0x0000592efbf35b65 _start (../llvm-build-debug/bin/clang-dxc+0x5d5fb65)
```
Contributor guide
Assessment
This issue has not been assessed yet.