Issue 177803
Summary [SPIRV][HLSL] FaceForward matcher is crashing for struct select test in offload test suite.
Labels crash-on-valid, HLSL, backend:SPIR-V
Assignees
Reporter farzonl
    The `Feature/HLSLLib/select.struct.test` test is crashing the faceforward matcher. 
```gdb
Process 41851 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x32)
    frame #0: 0x00000001000b32d0 clang-dxc`llvm::MachineInstr::getOpcode(this=0x0000000000000000) const at MachineInstr.h:599:39 [opt] [inlined]
   596    const MCInstrDesc &getDesc() const { return *MCID; }
   597 
   598    /// Returns the opcode of this MachineInstr.
-> 599    unsigned getOpcode() const { return Opcode; }
 600 
   601    /// Retuns the total number of operands.
   602    unsigned getNumOperands() const { return NumOperands; }
Target 0: (clang-dxc) stopped.
```

The bug itself is very flaky. I can't get it to consistently crash.  But it is because of this line:

```gdb
frame #1: 0x00000001000b32d0 clang-dxc`llvm::SPIRVCombinerHelper::matchSelectToFaceForward(this=0x000000016fdf4f90, MI=<unavailable>) const at SPIRVCombinerHelper.cpp:103:17 [opt]
   100 
 101    // Check if FCMP is a comparison between a dot product and 0.
   102 MachineInstr *DotInstr = MRI.getVRegDef(DotReg);
-> 103    if (DotInstr->getOpcode() != TargetOpcode::G_INTRINSIC ||
   104 cast<GIntrinsic>(DotInstr)->getIntrinsicID() != Intrinsic::spv_fdot) {
 105      Register DotOperand1, DotOperand2;
   106      // Check for scalar dot product.
```

The `DotInstr` is a nullptr @kmpeng can you investigate? Full stack trace.

```gdb
Stack dump:
0.      Program arguments: clang-dxc -spirv -fspv-target-env=vulkan1.3 -fspv-extension=DXC -T cs_6_5 -Fo /OffloadTest/test/clang-vk/Feature/HLSLLib/Output/select.struct.test.tmp.o /OffloadTest/test/clang-vk/Feature/HLSLLib/Output/select.struct.test.tmp/source.hlsl
1. <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '/OffloadTest/test/clang-vk/Feature/HLSLLib/Output/select.struct.test.tmp/source.hlsl'.
4. Running pass 'SPIRVPreLegalizerCombiner' on function '@main'
 #0 0x000000010237e288 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (clang-22+0x1014e2288)
 #1 0x000000010237c1ec llvm::sys::RunSignalHandlers() (clang-22+0x1014e01ec)
 #2 0x000000010237dab0 llvm::sys::CleanupOnSignal(unsigned long) (clang-22+0x1014e1ab0)
 #3 0x00000001022d0988 CrashRecoverySignalHandler(int) (clang-22+0x101434988)
 #4 0x000000018f65f744 (/usr/lib/system/libsystem_platform.dylib+0x1804e3744)
 #5 0x0000000100f4f2d0 llvm::SPIRVCombinerHelper::matchSelectToFaceForward(llvm::MachineInstr&) const (clang-22+0x1000b32d0)
 #6 0x0000000100f59a20 (anonymous namespace)::SPIRVPreLegalizerCombinerImpl::runCustomAction(unsigned int, llvm::GIMatchTableExecutor::MatcherState const&, llvm::SmallVector<llvm::MachineInstrBuilder, 4u>&) const (clang-22+0x1000bda20)
 #7 0x0000000100f5eff0 bool llvm::GIMatchTableExecutor::executeMatchTable<(anonymous namespace)::SPIRVPreLegalizerCombinerImpl const, llvm::Bitset<0u>, std::__1::optional<llvm::SmallVector<std::__1::function<void (llvm::MachineInstrBuilder&)>, 4u>> ((anonymous namespace)::SPIRVPreLegalizerCombinerImpl::*)(llvm::MachineOperand&) const, void ((anonymous namespace)::SPIRVPreLegalizerCombinerImpl::*)(llvm::MachineInstrBuilder&, llvm::MachineInstr const&, int) const>((anonymous namespace)::SPIRVPreLegalizerCombinerImpl const&, llvm::GIMatchTableExecutor::MatcherState&, llvm::GIMatchTableExecutor::ExecInfoTy<llvm::Bitset<0u>, std::__1::optional<llvm::SmallVector<std::__1::function<void (llvm::MachineInstrBuilder&)>, 4u>> ((anonymous namespace)::SPIRVPreLegalizerCombinerImpl::*)(llvm::MachineOperand&) const, void ((anonymous namespace)::SPIRVPreLegalizerCombinerImpl::*)(llvm::MachineInstrBuilder&, llvm::MachineInstr const&, int) const> const&, llvm::MachineIRBuilder&, unsigned char const*, llvm::TargetInstrInfo const&, llvm::MachineRegisterInfo&, llvm::TargetRegisterInfo const&, llvm::RegisterBankInfo const&, llvm::Bitset<0u> const&, llvm::CodeGenCoverage*) const (clang-22+0x1000c2ff0)
 #8 0x0000000100f59c74 (anonymous namespace)::SPIRVPreLegalizerCombinerImpl::tryCombineAll(llvm::MachineInstr&) const (clang-22+0x1000bdc74)
 #9 0x0000000103120228 llvm::Combiner::combineMachineInstrs() (clang-22+0x102284228)
#10 0x0000000100f58f98 (anonymous namespace)::SPIRVPreLegalizerCombiner::runOnMachineFunction(llvm::MachineFunction&) (clang-22+0x1000bcf98)
#11 0x0000000101769914 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (clang-22+0x1008cd914)
#12 0x0000000101b47754 llvm::FPPassManager::runOnFunction(llvm::Function&) (clang-22+0x100cab754)
#13 0x0000000101b4ca68 llvm::FPPassManager::runOnModule(llvm::Module&) (clang-22+0x100cb0a68)
#14 0x0000000101b47c98 llvm::legacy::PassManagerImpl::run(llvm::Module&) (clang-22+0x100cabc98)
#15 0x00000001027be12c clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (clang-22+0x10192212c)
#16 0x0000000102a20b0c clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (clang-22+0x101b84b0c)
#17 0x000000010385b004 clang::ParseAST(clang::Sema&, bool, bool) (clang-22+0x1029bf004)
#18 0x0000000102dae61c clang::HLSLFrontendAction::ExecuteAction() (clang-22+0x101f1261c)
#19 0x0000000102d9509c clang::FrontendAction::Execute() (clang-22+0x101ef909c)
#20 0x0000000102d34318 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (clang-22+0x101e98318)
#21 0x0000000102e1163c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (clang-22+0x101f7563c)
#22 0x0000000100ea16d4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (clang-22+0x1000056d4)
#23 0x0000000100e9fa10 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) (clang-22+0x100003a10)
#24 0x0000000100ea1074 int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) (clang-22+0x100005074)
#25 0x0000000102bd0348 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>(long) (clang-22+0x101d34348)
#26 0x00000001022d0680 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (clang-22+0x101434680)
#27 0x0000000102bcfde0 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 (clang-22+0x101d33de0)
#28 0x0000000102ba0670 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (clang-22+0x101d04670)
#29 0x0000000102ba083c clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&, bool) const (clang-22+0x101d0483c)
#30 0x0000000102bb9130 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&) (clang-22+0x101d1d130)
#31 0x0000000100e9edfc clang_main(int, char**, llvm::ToolContext const&) (clang-22+0x100002dfc)
#32 0x0000000100eaaa84 main (clang-22+0x10000ea84)
#33 0x000000018f28dd54
clang-dxc: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 23.0.0git (https://github.com/llvm/llvm-project.git fe71ea4437a8a6cc6e0b2e54e6d0a1fadd7ed029)
Target: spirv1.6-unknown-vulkan1.3-compute
Thread model: posix
InstalledDir: /Users/farzon/Projects/builds/llvm_relwithdebinfo_offload/bin
Build config: +assertions
clang-dxc: note: diagnostic msg: 
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to