[HLSL][SPIRV] Assert being triggered during CBuffer Array Dynamic Index Lowering
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
HLSL Offload Tests found bug on test Feature/CBuffer/array-dynamic-index.test. After investigation we belived that such was caused by: https://github.com/llvm/llvm-project/pull/180745.
Build where the issue was found: https://github.com/llvm/offload-test-suite/actions/runs/22771619489/job/66053904612
Stack trace:
```
# .---command stderr------------
# | Unimplemented implicit down-cast from load.
# | UNREACHABLE executed at E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Target\SPIRV\SPIRVLegalizePointerCast.cpp:275!
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
# | Stack dump:
# | 0. Program arguments: e:\\actions-runner\\_work\\offload-test-suite\\offload-test-suite\\llvm-project\\build\\bin\\clang-dxc.exe -spirv -fspv-target-env=vulkan1.3 -fspv-extension=DXC --dxv-path=E:/actions-runner/_work/offload-test-suite/offload-test-suite/DXC/build/bin -fvk-use-dx-layout -T cs_6_5 -Fo E:\\actions-runner\\_work\\offload-test-suite\\offload-test-suite\\llvm-project\\build\\tools\\OffloadTest\\test\\clang-vk\\Feature\\CBuffer\\Output\\array-dynamic-index.test.tmp.o E:\\actions-runner\\_work\\offload-test-suite\\offload-test-suite\\llvm-project\\build\\tools\\OffloadTest\\test\\clang-vk\\Feature\\CBuffer\\Output\\array-dynamic-index.test.tmp/source.hlsl
# | 1. parser at end of file
# | 2. Code generation
# | 3. Running pass 'Function Pass Manager' on module 'E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\OffloadTest\test\clang-vk\Feature\CBuffer\Output\array-dynamic-index.test.tmp/source.hlsl'.
# | 4. Running pass 'SPIRV legalize bitcast pass' on function '@main'
# | Exception Code: 0xC000001D
# | #0 0x00007ff7ac213f26 HandleAbort E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Support\Windows\Signals.inc:371:0
# | #1 0x00007ffaeeb31989 (C:\WINDOWS\System32\ucrtbase.dll+0xc1989)
# | #2 0x00007ffaeeb14ab1 (C:\WINDOWS\System32\ucrtbase.dll+0xa4ab1)
# | #3 0x00007ff7ac25e705 llvm::llvm_unreachable_internal(char const *, char const *, unsigned int) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Support\ErrorHandling.cpp:244:0
# | #4 0x00007ff7ac5d1983 `anonymous namespace'::SPIRVLegalizePointerCast::transformLoad E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Target\SPIRV\SPIRVLegalizePointerCast.cpp:275:0
# | #5 0x00007ff7ac5d1983 `anonymous namespace'::SPIRVLegalizePointerCast::legalizePointerCast E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Target\SPIRV\SPIRVLegalizePointerCast.cpp:435:0
# | #6 0x00007ff7ac5d1983 `anonymous namespace'::SPIRVLegalizePointerCast::runOnFunction E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Target\SPIRV\SPIRVLegalizePointerCast.cpp:491:0
# | #7 0x00007ff7abf8a222 llvm::FPPassManager::runOnFunction(class llvm::Function &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1398:0
# | #8 0x00007ff7abf917dd llvm::FPPassManager::runOnModule(class llvm::Module &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1444:0
# | #9 0x00007ff7abf8aa9f `anonymous namespace'::MPPassManager::runOnModule E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1513:0
# | #10 0x00007ff7abf8a6ae llvm::legacy::PassManagerImpl::run(class llvm::Module &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:531:0
# | #11 0x00007ff7ad39754f `anonymous namespace'::EmitAssemblyHelper::RunCodegenPipeline E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\CodeGen\BackendUtil.cpp:1278:0
# | #12 0x00007ff7ad38e2d8 std::unique_ptr >::operator bool C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.44.35207\include\memory:3461:0
# | #13 0x00007ff7ad38e2d8 `anonymous namespace'::EmitAssemblyHelper::emitAssembly E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\CodeGen\BackendUtil.cpp:1303:0
# | #14 0x00007ff7ad38cf5c std::unique_ptr >::operator bool C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.44.35207\include\memory:3461:0
# | #15 0x00007ff7ad38cf5c clang::emitBackendOutput(class clang::CompilerInstance &, class clang::CodeGenOptions &, class llvm::StringRef, class llvm::Module *, enum clang::BackendAction, class llvm::IntrusiveRefCntPtr, class std::unique_ptr>, class clang::BackendConsumer *) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\CodeGen\BackendUtil.cpp:1479:0
# | #16 0x00007ff7ad997dee std::unique_ptr >::operator bool C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.44.35207\include\memory:3461:0
# | #17 0x00007ff7ad997dee llvm::LLVMRemarkFileHandle::operator bool E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\include\llvm\IR\LLVMRemarkStreamer.h:124:0
# | #18 0x00007ff7ad997dee clang::BackendConsumer::HandleTranslationUnit(class clang::ASTContext &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\CodeGen\CodeGenAction.cpp:316:0
# | #19 0x00007ff7afbfd697 clang::ParseAST(class clang::Sema &, bool, bool) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Parse\ParseAST.cpp:183:0
# | #20 0x00007ff7ad9518b6 clang::HLSLFrontendAction::ExecuteAction(void) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Frontend\FrontendActions.cpp:1330:0
# | #21 0x00007ff7ad8e1571 clang::FrontendAction::Execute(void) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Frontend\FrontendAction.cpp:1327:0
# | #22 0x00007ff7ac3794eb llvm::Error::getPtr E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\include\llvm\Support\Error.h:277:0
# | #23 0x00007ff7ac3794eb llvm::Error::operator bool E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\include\llvm\Support\Error.h:241:0
# | #24 0x00007ff7ac3794eb clang::CompilerInstance::ExecuteAction(class clang::FrontendAction &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Frontend\CompilerInstance.cpp:1002:0
# | #25 0x00007ff7ac4337d9 clang::ExecuteCompilerInvocation(class clang::CompilerInstance *) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\FrontendTool\ExecuteCompilerInvocation.cpp:312:0
# | #26 0x00007ff7abcf7629 cc1_main(class llvm::ArrayRef, char const *, void *) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\tools\driver\cc1_main.cpp:302:0
# | #27 0x00007ff7abcf32d0 ExecuteCC1Tool E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\tools\driver\driver.cpp:229:0
# | #28 0x00007ff7abcf6d98 clang_main::::operator() E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\tools\driver\driver.cpp:379:0
# | #29 0x00007ff7abcf6d98 llvm::function_ref &)>::callback_fn<`lambda at E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\tools\driver\driver.cpp:377:32'> E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\include\llvm\ADT\STLFunctionalExtras.h:46:0
# | #30 0x00007ff7ad6a09ed clang::driver::CC1Command::Execute::::operator() E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Driver\Job.cpp:442:0
# | #31 0x00007ff7ad6a09ed llvm::function_ref::callback_fn<`lambda at E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Driver\Job.cpp:442:22'> E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\include\llvm\ADT\STLFunctionalExtras.h:46:0
# | #32 0x00007ff7ac20e625 llvm::CrashRecoveryContext::RunSafely(class llvm::function_ref<(void)>) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\lib\Support\CrashRecoveryContext.cpp:237:0
# | #33 0x00007ff7ad69fcdb clang::driver::CC1Command::Execute(class llvm::ArrayRef>, class std::basic_string, class std::allocator> *, bool *) const E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Driver\Job.cpp:442:0
# | #34 0x00007ff7ac35d7c2 clang::driver::Compilation::ExecuteCommand(class clang::driver::Command const &, class clang::driver::Command const *&, bool) const E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Driver\Compilation.cpp:196:0
# | #35 0x00007ff7ac35da4d clang::driver::Compilation::ExecuteJobs(class clang::driver::JobList const &, class llvm::SmallVectorImpl> &, bool) const E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Driver\Compilation.cpp:246:0
# | #36 0x00007ff7ac336adc llvm::SmallVectorBase::empty E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\llvm\include\llvm\ADT\SmallVector.h:83:0
# | #37 0x00007ff7ac336adc clang::driver::Driver::ExecuteCompilation(class clang::driver::Compilation &, class llvm::SmallVectorImpl> &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\lib\Driver\Driver.cpp:2330:0
# | #38 0x00007ff7abcf26bc clang_main(int, char **, struct llvm::ToolContext const &) E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\clang\tools\driver\driver.cpp:419:0
# | #39 0x00007ff7abd0802c main E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\tools\clang\tools\driver\clang-driver.cpp:17:0
# | #40 0x00007ff7b22c4034 invoke_main D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78:0
# | #41 0x00007ff7b22c4034 __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0
# | #42 0x00007ffaefdde8d7 (C:\WINDOWS\System32\KERNEL32.DLL+0x2e8d7)
# | #43 0x00007ffaf18cc53c (C:\WINDOWS\SYSTEM32\ntdll.dll+0x8c53c)
# | clang-dxc: error: clang frontend command failed due to signal (use -v to see invocation)
# | clang version 23.0.0git (https://github.com/llvm/llvm-project ad6d87da32f9d124ead257af45310348e092767c)
# | Target: spirv1.6-unknown-vulkan1.3-compute
# | Thread model: posix
# | InstalledDir: E:\actions-runner\_work\offload-test-suite\offload-test-suite\llvm-project\build\bin
# | Build config: +assertions
# | clang-dxc: note: diagnostic msg:
# | ********************
# |
# | PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
# | Preprocessed source(s) and associated run script(s) are located at:
# | clang-dxc: note: diagnostic msg: C:\WINDOWS\SERVIC~1\NETWOR~1\AppData\Local\Temp\lit-tmp-h4x2wxty\source-5bf42e.hlsl
# | clang-dxc: note: diagnostic msg: C:\WINDOWS\SERVIC~1\NETWOR~1\AppData\Local\Temp\lit-tmp-h4x2wxty\source-5bf42e.sh
# | clang-dxc: note: diagnostic msg:
# |
# | ********************
# `-----------------------------
# error: command failed with exit status: 1
```
Contributor guide
Research direction
Reproduce Feature/CBuffer/array-dynamic-index.test with the clang-dxc invocation described in the report. Read llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp around transformLoad at line 275 and its callers legalizePointerCast and runOnFunction. Done means the test compiles without triggering the assertion.
Written by the indexing model from the issue text.
Assessment
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100