Issue 203295
Summary [AArch64] Assertion failure with SME intrinsic with constant slice number: "This is not a register operand!"
Labels backend:AArch64, crash-on-valid
Assignees
Reporter ostannard
    This code using an SME intrinsic triggers an assertion failure in the MC layer:
```c
#include <arm_sme.h>

void foo(void)  __arm_streaming __arm_inout("za") {
  svwrite_hor_za32_u32_m(0, 1, svptrue_b32(), svdup_u32(1));
}
```

```
$ /work/llvm/build/bin/clang --target=aarch64-none-elf -march=armv9.2-a+sme -c crash.c
clang: /work/llvm/llvm-project/llvm/include/llvm/MC/MCInst.h:74: llvm::MCRegister llvm::MCOperand::getReg() const: Assertion `isReg() && "This is not a register operand!"' failed.
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: /work/llvm/build/bin/clang --target=aarch64-none-elf -march=armv9.2-a+sme -c crash.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'crash.c'.
4.      Running pass 'AArch64 Assembly Printer' on function '@foo'
 #0 0x000055778530b110 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/llvm/build/bin/clang+0x5763110)
 #1 0x0000557785307d0f llvm::sys::RunSignalHandlers() (/work/llvm/build/bin/clang+0x575fd0f)
 #2 0x0000557785247e08 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f07eac42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f07eac969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007f07eac969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007f07eac969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007f07eac42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007f07eac287f3 abort ./stdlib/abort.c:81:7
 #9 0x00007f07eac2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007f07eac39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x0000557784051f45 (/work/llvm/build/bin/clang+0x44a9f45)
#12 0x0000557784071257 (anonymous namespace)::AArch64MCCodeEmitter::encodeInstruction(llvm::MCInst const&, llvm::SmallVectorImpl<char>&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const AArch64MCCodeEmitter.cpp:0:0
#13 0x0000557784fa12bf llvm::MCObjectStreamer::emitInstToData(llvm::MCInst const&, llvm::MCSubtargetInfo const&) (/work/llvm/build/bin/clang+0x53f92bf)
#14 0x0000557783c2244d (anonymous namespace)::AArch64AsmPrinter::emitInstruction(llvm::MachineInstr const*) AArch64AsmPrinter.cpp:0:0
#15 0x000055778683fb0f llvm::AsmPrinter::emitFunctionBody() (/work/llvm/build/bin/clang+0x6c97b0f)
#16 0x0000557783c15a99 (anonymous namespace)::AArch64AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) AArch64AsmPrinter.cpp:0:0
#17 0x00005577845c4c6e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#18 0x0000557784ca63ee llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x50fe3ee)
#19 0x0000557784ca67a9 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/llvm/build/bin/clang+0x50fe7a9)
#20 0x0000557784ca7147 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/llvm/build/bin/clang+0x50ff147)
#21 0x0000557785e076b4 (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>>&) BackendUtil.cpp:0:0
#22 0x0000557785e08124 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*) (/work/llvm/build/bin/clang+0x6260124)
#23 0x0000557785f7de72 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/work/llvm/build/bin/clang+0x63d5e72)
#24 0x0000557787f4b7bc clang::ParseAST(clang::Sema&, bool, bool) (/work/llvm/build/bin/clang+0x83a37bc)
#25 0x000055778650a041 clang::FrontendAction::Execute() (/work/llvm/build/bin/clang+0x6962041)
#26 0x0000557786479415 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/work/llvm/build/bin/clang+0x68d1415)
#27 0x0000557786616b13 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/work/llvm/build/bin/clang+0x6a6eb13)
#28 0x000055778346a7f2 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/work/llvm/build/bin/clang+0x38c27f2)
#29 0x000055778345fdca ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) driver.cpp:0:0
#30 0x000055778345ff5f int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)>(long, llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#31 0x00005577861f52dd 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::'lambda'()>(long) Job.cpp:0:0
#32 0x0000557785248220 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/work/llvm/build/bin/clang+0x56a0220)
#33 0x00005577861f5bce clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#34 0x00005577861a9877 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/work/llvm/build/bin/clang+0x6601877)
#35 0x00005577861aa911 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/work/llvm/build/bin/clang+0x6602911)
#36 0x00005577861b7124 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/work/llvm/build/bin/clang+0x660f124)
#37 0x000055778346582c clang_main(int, char**, llvm::ToolContext const&) (/work/llvm/build/bin/clang+0x38bd82c)
#38 0x0000557783479431 main (/work/llvm/build/bin/clang+0x38d1431)
#39 0x00007f07eac29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#40 0x00007f07eac29e40 call_init ./csu/../csu/libc-start.c:128:20
#41 0x00007f07eac29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#42 0x000055778345f4e5 _start (/work/llvm/build/bin/clang+0x38b74e5)
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 23.0.0git ([email protected]:llvm/llvm-project.git 0b062c588aa75fa002ffe2d020da342947f80caf)
Target: aarch64-unknown-none-elf
Thread model: posix
InstalledDir: /work/llvm/build/bin
Build config: +assertions
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:
clang: note: diagnostic msg: /tmp/crash-8efcee.c
clang: note: diagnostic msg: /tmp/crash-8efcee.sh
clang: note: diagnostic msg: 

********************
fish: Job 1, '/work/llvm/build/bin/clang --ta…' terminated by signal SIGABRT (Abort)
```

With `-S`, the generated assembly uses an array index of `[#0, 1]` in the `MOVA` instruction, but the first operand must be a W register, not an immediate.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to