Issue 177838
Summary [SPIRV] Assert hit when target Vector is smaller than source Vector
Labels crash-on-valid, backend:SPIR-V
Assignees
Reporter farzonl
    This commit introduced an assert that is firing eroneously to`SPIRVLegalizePointerCast.cpp‎`:
https://github.com/llvm/llvm-project/commit/9f72fab4901d4e2b49c8b1974e1d75d73728e416#diff-2085d855d75313c3124e3ab155849491fc91366504702e8bee4b91ce36e44adbR80-R85

@s-perron do you know why we need this? Seems like things work correctly with asserts off.

https://github.com/llvm/llvm-project/blob/402ee51532762b6612ece4fcfa89e8215fccce00/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp#L80-L85

This is causing the debug build of the offload test suite to  crash for the  `Feature/HLSLLib/asint.test` tests.

```gdb
frame #7: 0x000055555b6df67f clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::loadVectorFromVector(this=0x000055556476b860, B=0x00007fffffff2508, SourceType=0x00005555643f3560, TargetType=0x0000555564762dd0, Source=0x0000555564769980) at SPIRVLegalizePointerCast.cpp:85:7
   82  	          DL.getTypeSizeInBits(TargetType);
   83  	      [[maybe_unused]] TypeSize SourceTypeSize =
   84  	          DL.getTypeSizeInBits(SourceType);
-> 85  	      assert(TargetTypeSize == SourceTypeSize);
   86  	      AssignValue = B.CreateIntrinsic(Intrinsic::spv_bitcast,
   87  	                                      {TargetType, SourceType}, {NewLoad});
   88  	      buildAssignType(B, TargetType, AssignValue);
(lldb) expr SourceType->dump()
<4 x float>
(lldb) expr TargetType->dump()
<2 x i32>
(lldb) expr SourceTypeSize
(llvm::TypeSize) $4 = {
  llvm::details::FixedOrScalableQuantity<llvm::TypeSize, unsigned long> = (Quantity = 128, Scalable = false)
}
(lldb) expr TargetTypeSize
(llvm::TypeSize) $5 = {
  llvm::details::FixedOrScalableQuantity<llvm::TypeSize, unsigned long> = (Quantity = 64, Scalable = false)
}
```

## Stacktrace
clang-dxc -spirv -fspv-target-env=vulkan1.3 -T cs_6_5 -Fo tools/OffloadTest/test/clang-vk/Feature/HLSLLib/Output/asint.test.tmp.o tools/OffloadTest/test/clang-vk/Feature/HLSLLib/Output/asint.test.tmp/source.hlsl
```gdb
* thread #1, name = 'clang-dxc', stop reason = signal SIGABRT
    frame #0: 0x00007ffff769eb2c libc.so.6`__pthread_kill_implementation(no_tid=0, signo=6, threadid=<unavailable>) at pthread_kill.c:44:76
    frame #1: 0x00007ffff769eae8 libc.so.6`__pthread_kill_internal(signo=6, threadid=<unavailable>) at pthread_kill.c:78:10 [inlined]
    frame #2: 0x00007ffff769eae8 libc.so.6`__GI___pthread_kill(threadid=<unavailable>, signo=6) at pthread_kill.c:89:10
    frame #3: 0x00007ffff764527e libc.so.6`__GI_raise(sig=6) at raise.c:26:13
    frame #4: 0x00007ffff76288ff libc.so.6`__GI_abort at abort.c:79:7
    frame #5: 0x00007ffff762881b libc.so.6`__assert_fail_base(fmt="%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion="TargetTypeSize == SourceTypeSize", file="/mnt/DevDrive/projects/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp", line=85, function="Value *(anonymous namespace)::SPIRVLegalizePointerCast::loadVectorFromVector(IRBuilder<> &, FixedVectorType *, FixedVectorType *, Value *)") at assert.c:96:3
    frame #6: 0x00007ffff763b517 libc.so.6`__assert_fail(assertion="TargetTypeSize == SourceTypeSize", file="/mnt/DevDrive/projects/llvm-project/llvm/lib/Target/SPIRV/SPIRVLegalizePointerCast.cpp", line=85, function="Value *(anonymous namespace)::SPIRVLegalizePointerCast::loadVectorFromVector(IRBuilder<> &, FixedVectorType *, FixedVectorType *, Value *)") at assert.c:105:3
  * frame #7: 0x000055555b6df67f clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::loadVectorFromVector(this=0x000055556476b860, B=0x00007fffffff2508, SourceType=0x00005555643f3560, TargetType=0x0000555564762dd0, Source=0x0000555564769980) at SPIRVLegalizePointerCast.cpp:85:7
    frame #8: 0x000055555b6dee89 clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::transformLoad(this=0x000055556476b860, B=0x00007fffffff2508, LI=0x00005555644a4320, CastedOperand=0x000055556478a3c0, OriginalOperand=0x0000555564769980) at SPIRVLegalizePointerCast.cpp:225:16
    frame #9: 0x000055555b6deb45 clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::legalizePointerCast(this=0x000055556476b860, II=0x000055556478a3c0) at SPIRVLegalizePointerCast.cpp:389:9
    frame #10: 0x000055555b6de889 clang-dxc`(anonymous namespace)::SPIRVLegalizePointerCast::runOnFunction(this=0x000055556476b860, F=0x000055556473f9a8) at SPIRVLegalizePointerCast.cpp:445:7
    frame #11: 0x000055555cf85b8f clang-dxc`llvm::FPPassManager::runOnFunction(this=0x00005555644a6eb0, F=0x000055556473f9a8) at LegacyPassManager.cpp:1398:27
    frame #12: 0x000055555cf8a21b clang-dxc`llvm::FPPassManager::runOnModule(this=0x00005555644a6eb0, M=0x00005555643efdb0) at LegacyPassManager.cpp:1444:16
    frame #13: 0x000055555cf863b9 clang-dxc`(anonymous namespace)::MPPassManager::runOnModule(this=0x00005555644a8bf0, M=0x00005555643efdb0) at LegacyPassManager.cpp:1513:27
    frame #14: 0x000055555cf85f7f clang-dxc`llvm::legacy::PassManagerImpl::run(this=0x000055556472e170, M=0x00005555643efdb0) at LegacyPassManager.cpp:531:44
    frame #15: 0x000055555cf8a4c1 clang-dxc`llvm::legacy::PassManager::run(this=0x00007fffffff2d18, M=0x00005555643efdb0) at LegacyPassManager.cpp:1640:14
    frame #16: 0x000055555e64de73 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(this=0x00007fffffff3230, Action="" OS=llvm::raw_pwrite_stream @ 0x00005555643ce220, DwoOS=nullptr) at BackendUtil.cpp:1277:19
    frame #17: 0x000055555e647888 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::emitAssembly(this=0x00007fffffff3230, Action="" OS=llvm::raw_pwrite_stream @ 0x00005555643ce220, BC=0x00005555643b5570) at BackendUtil.cpp:1301:3
    frame #18: 0x000055555e646d9c clang-dxc`clang::emitBackendOutput(CI=0x00005555643b5340, CGOpts=0x00005555643aae80, TDesc=(Data = "" Length = 98), M=0x00005555643efdb0, Action="" VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x00007fffffff3508, OS=nullptr, BC=0x00005555643b5570) at BackendUtil.cpp:1473:13
    frame #19: 0x000055555e66f9ef clang-dxc`clang::BackendConsumer::HandleTranslationUnit(this=0x00005555643b5570, C=0x00005555643d6c00) at CodeGenAction.cpp:310:3
    frame #20: 0x00005555613bf8bb clang-dxc`clang::ParseAST(S=0x0000555564409850, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:183:13
    frame #21: 0x000055555ee441d9 clang-dxc`clang::ASTFrontendAction::ExecuteAction(this=0x00005555643b4890) at FrontendAction.cpp:1433:3
    frame #22: 0x000055555e67368d clang-dxc`clang::CodeGenAction::ExecuteAction(this=0x00005555643b4890) at CodeGenAction.cpp:1107:30
    frame #23: 0x000055555ee44422 clang-dxc`clang::WrapperFrontendAction::ExecuteAction(this=0x00005555643a63f0) at FrontendAction.cpp:1465:18
    frame #24: 0x000055555ee97631 clang-dxc`clang::HLSLFrontendAction::ExecuteAction(this=0x00005555643a63f0) at FrontendActions.cpp:1325:35
    frame #25: 0x000055555ee43bb6 clang-dxc`clang::FrontendAction::Execute(this=0x00005555643a63f0) at FrontendAction.cpp:1313:3
    frame #26: 0x000055555ed4c913 clang-dxc`clang::CompilerInstance::ExecuteAction(this=0x00005555643b5340, Act=0x00005555643a63f0) at CompilerInstance.cpp:1007:33
    frame #27: 0x000055555f0298a5 clang-dxc`clang::ExecuteCompilerInvocation(Clang=0x00005555643b5340) at ExecuteCompilerInvocation.cpp:310:25
    frame #28: 0x000055555b501736 clang-dxc`cc1_main(Argv=ArrayRef<const char *> @ 0x00007fffffff8368, Argv0="/mnt/DevDrive/projects/llvm_builds/llvm_debug_offload/bin/clang-23", MainAddr=0x000055555b4f3870) at cc1_main.cpp:304:15
    frame #29: 0x000055555b4f4f48 clang-dxc`ExecuteCC1Tool(ArgV=0x00007fffffff8740, ToolContext=0x00007fffffffdf30, VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x00007fffffff85a8) at driver.cpp:226:12
    frame #30: 0x000055555b4f5a21 clang-dxc`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=0x00007fffffff91b8, ArgV=0x00007fffffff8740) const at driver.cpp:376:12
    frame #31: 0x000055555b4f59cd clang-dxc`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=140737488327096, params=0x00007fffffff8740) at STLFunctionalExtras.h:46:12
    frame #32: 0x000055555ebaecd1 clang-dxc`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=0x00007fffffff9638, params=0x00007fffffff8740) const at STLFunctionalExtras.h:69:12
    frame #33: 0x000055555ebabd68 clang-dxc`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()(this=0x00007fffffff86e0) const at Job.cpp:442:34
    frame #34: 0x000055555ebabd35 clang-dxc`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>(callable=140737488324320) at STLFunctionalExtras.h:46:12
    frame #35: 0x000055555c3693f9 clang-dxc`llvm::function_ref<void ()>::operator()(this=0x00007fffffff8698) const at STLFunctionalExtras.h:69:12
    frame #36: 0x000055555d7369df clang-dxc`llvm::CrashRecoveryContext::RunSafely(this=0x00007fffffff8720, Fn=function_ref<void ()> @ 0x00007fffffff8698) at CrashRecoveryContext.cpp:426:3
    frame #37: 0x000055555ebab6f8 clang-dxc`clang::driver::CC1Command::Execute(this=0x00005555643a8590, Redirects=ArrayRef<std::optional<llvm::StringRef> > @ 0x00007fffffff8b78, ErrMsg="", ExecutionFailed=0x00007fffffff8c37) const at Job.cpp:442:12
    frame #38: 0x000055555eb41952 clang-dxc`clang::driver::Compilation::ExecuteCommand(this=0x00005555643a6b30, C=0x00005555643a8590, FailingCommand=0x00007fffffff8d58, LogOnly=false) const at Compilation.cpp:196:15
    frame #39: 0x000055555eb41b36 clang-dxc`clang::driver::Compilation::ExecuteJobs(this=0x00005555643a6b30, Jobs=0x00005555643a6bc8, FailingCommands=0x00007fffffff9040, LogOnly=false) const at Compilation.cpp:246:19
    frame #40: 0x000055555eb5d8d1 clang-dxc`clang::driver::Driver::ExecuteCompilation(this=0x00007fffffff9298, C=0x00005555643a6b30, FailingCommands=0x00007fffffff9040) at Driver.cpp:2262:5
    frame #41: 0x000055555b4f4a56 clang-dxc`clang_main(Argc=8, Argv=0x00007fffffffe118, ToolContext=0x00007fffffffdf30) at driver.cpp:414:21
    frame #42: 0x000055555b5273d5 clang-dxc`main(argc=8, argv=0x00007fffffffe118) at clang-driver.cpp:17:10
    frame #43: 0x00007ffff762a1ca libc.so.6`__libc_start_call_main(main=(clang-dxc`main at clang-driver.cpp:15), argc=8, argv=0x00007fffffffe118) at libc_start_call_main.h:58:16
    frame #44: 0x00007ffff762a28b libc.so.6`__libc_start_main_impl(main=(clang-dxc`main at clang-driver.cpp:15), argc=8, argv=0x00007fffffffe118, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffffe108) at libc-start.c:360:3
    frame #45: 0x000055555b4f37a5 clang-dxc`_start + 37
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to