The odd register of a (128 bit) register pair is accessed with the 'N' code with an inline assembly operand.
Details
Details
Diff Detail
Diff Detail
Event Timeline
Comment Actions
I see the following crash when compiling the -next Linux kernel, which contains https://git.kernel.org/next/linux-next/c/4516f355c55f6da231c494c6d2be7d863d02f13c, which mentions this commit directly:
$ make -skj"$(nproc)" ARCH=s390 CC=clang CROSS_COMPILE=s390x-linux-gnu- O=build/s390 distclean defconfig drivers/s390/crypto/ clang-13: /home/nathan/cbl/github/tc-build/llvm-project/llvm/lib/CodeGen/MachineRegisterInfo.cpp:285: void llvm::MachineRegisterInfo::addRegOperandToUseList(llvm::MachineOperand *): Assertion `Last && "Inconsistent use list"' failed. PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script. Stack dump: 0. Program arguments: /home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13 -cc1 -triple s390x-unknown-linux-gnu -S -disable-free -main-file-name ap_queue.c -mrelocation-model pic -pic-level 2 -pic-is-pie -fno-delete-null-pointer-checks -fwarn-stack-size=2048 -mframe-pointer=none -relaxed-aliasing -fmath-errno -fno-rounding-math -no-integrated-as -mconstructor-aliases -target-cpu zEC12 -target-feature +soft-float -mbackchain -mpacked-stack -msoft-float -mfloat-abi soft -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -fcoverage-compilation-dir=/home/nathan/cbl/src/linux-next/build/s390 -nostdsysteminc -nobuiltininc -resource-dir /home/nathan/cbl/github/tc-build/build/llvm/stage1/lib/clang/13.0.0 -dependency-file drivers/s390/crypto/.ap_queue.o.d -MT drivers/s390/crypto/ap_queue.o -isystem /home/nathan/cbl/github/tc-build/build/llvm/stage1/lib/clang/13.0.0/include -include /home/nathan/cbl/src/linux-next/include/linux/compiler-version.h -include /home/nathan/cbl/src/linux-next/include/linux/kconfig.h -include /home/nathan/cbl/src/linux-next/include/linux/compiler_types.h -I /home/nathan/cbl/src/linux-next/arch/s390/include -I ./arch/s390/include/generated -I /home/nathan/cbl/src/linux-next/include -I ./include -I /home/nathan/cbl/src/linux-next/arch/s390/include/uapi -I ./arch/s390/include/generated/uapi -I /home/nathan/cbl/src/linux-next/include/uapi -I ./include/generated/uapi -D __KERNEL__ -D __PACK_STACK -D CONFIG_AS_CFI_VAL_OFFSET=1 -D CC_USING_NOP_MCOUNT -D CC_USING_FENTRY -I /home/nathan/cbl/src/linux-next/drivers/s390/crypto -I ./drivers/s390/crypto -D KBUILD_MODFILE=\"drivers/s390/crypto/ap\" -D KBUILD_BASENAME=\"ap_queue\" -D KBUILD_MODNAME=\"ap\" -D __KBUILD_MODNAME=kmod_ap -fmacro-prefix-map=/home/nathan/cbl/src/linux-next/= -O2 -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -Werror=unknown-warning-option -Wno-sign-compare -Wno-frame-address -Wno-address-of-packed-member -Wframe-larger-than=2048 -Wno-format-invalid-specifier -Wno-gnu -Wno-unused-but-set-variable -Wno-unused-const-variable -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-array-bounds -Werror=date-time -Werror=incompatible-pointer-types -Wno-initializer-overrides -Wno-format -Wno-sign-compare -Wno-format-zero-length -Wno-pointer-to-enum-cast -Wno-tautological-constant-out-of-range-compare -std=gnu89 -fno-dwarf-directory-asm -fdebug-compilation-dir=/home/nathan/cbl/src/linux-next/build/s390 -ferror-limit 19 -pg -mfentry -mnop-mcount -mrecord-mcount -fwrapv -fno-signed-char -fwchar-type=short -fno-signed-wchar -fgnuc-version=4.2.1 -fcolor-diagnostics -vectorize-loops -vectorize-slp -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/ap_queue-73312c.s -x c /home/nathan/cbl/src/linux-next/drivers/s390/crypto/ap_queue.c 1. <eof> parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module '/home/nathan/cbl/src/linux-next/drivers/s390/crypto/ap_queue.c'. 4. Running pass 'SystemZ Assembly Printer' on function '@ap_recv' #0 0x0000000002abf4c3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x2abf4c3) #1 0x0000000002abd30e llvm::sys::RunSignalHandlers() (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x2abd30e) #2 0x0000000002abf98a SignalHandler(int) Signals.cpp:0:0 #3 0x00007f7231630870 __restore_rt sigaction.c:0:0 #4 0x00007f72310ead22 raise (/usr/lib/libc.so.6+0x3cd22) #5 0x00007f72310d4862 abort (/usr/lib/libc.so.6+0x26862) #6 0x00007f72310d4747 _nl_load_domain.cold loadmsgcat.c:0:0 #7 0x00007f72310e3616 (/usr/lib/libc.so.6+0x35616) #8 0x0000000001f95442 llvm::MachineRegisterInfo::addRegOperandToUseList(llvm::MachineOperand*) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x1f95442) #9 0x000000000188a865 llvm::SystemZAsmPrinter::PrintAsmOperand(llvm::MachineInstr const*, unsigned int, char const*, llvm::raw_ostream&) SystemZAsmPrinter.cpp:0:0 #10 0x00000000037dffdb llvm::AsmPrinter::emitInlineAsm(llvm::MachineInstr const*) const (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x37dffdb) #11 0x00000000037cd10e llvm::AsmPrinter::emitFunctionBody() (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x37cd10e) #12 0x000000000188aac5 llvm::AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) SystemZAsmPrinter.cpp:0:0 #13 0x0000000001f6553d llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x1f6553d) #14 0x00000000023f62a8 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x23f62a8) #15 0x00000000023fe771 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x23fe771) #16 0x00000000023f6da1 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x23f6da1) #17 0x00000000031aa4bf (anonymous namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) BackendUtil.cpp:0:0 #18 0x00000000031a4c1c clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x31a4c1c) #19 0x000000000363ed30 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0 #20 0x0000000003d582f4 clang::ParseAST(clang::Sema&, bool, bool) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x3d582f4) #21 0x0000000003593240 clang::FrontendAction::Execute() (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x3593240) #22 0x00000000035064ff clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x35064ff) #23 0x0000000003638db7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x3638db7) #24 0x000000000187bc28 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x187bc28) #25 0x000000000187977d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0 #26 0x00000000018794dd main (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x18794dd) #27 0x00007f72310d5b25 __libc_start_main (/usr/lib/libc.so.6+0x27b25) #28 0x00000000018763ee _start (/home/nathan/cbl/github/tc-build/build/llvm/stage1/bin/clang-13+0x18763ee) clang-13: error: unable to execute command: Aborted (core dumped) clang-13: error: clang frontend command failed due to signal (use -v to see invocation) ClangBuiltLinux clang version 13.0.0 (https://github.com/llvm/llvm-project a821df993def459009a0d8263af879fc35400a94) Target: s390x-unknown-linux-gnu Thread model: posix InstalledDir: /home/nathan/cbl/github/tc-build/build/llvm/stage1/bin clang-13: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: clang-13: note: diagnostic msg: /tmp/ap_queue-12da73.c clang-13: note: diagnostic msg: /tmp/ap_queue-12da73.sh clang-13: note: diagnostic msg: ******************** make[4]: *** [/home/nathan/cbl/src/linux-next/scripts/Makefile.build:272: drivers/s390/crypto/ap_queue.o] Error 254 make[4]: Target '__build' not remade because of errors. make[3]: *** [/home/nathan/cbl/src/linux-next/scripts/Makefile.build:536: drivers/s390/crypto] Error 2 make[3]: Target '__build' not remade because of errors. make[2]: *** [/home/nathan/cbl/src/linux-next/Makefile:1993: drivers/s390] Error 2 make[2]: Target 'drivers/s390/crypto/' not remade because of errors. make[1]: *** [/home/nathan/cbl/src/linux-next/Makefile:358: __build_one_by_one] Error 2 make[1]: Target 'distclean' not remade because of errors. make[1]: Target 'defconfig' not remade because of errors. make[1]: Target 'drivers/s390/crypto/' not remade because of errors. make: *** [Makefile:227: __sub-make] Error 2 make: Target 'distclean' not remade because of errors. make: Target 'defconfig' not remade because of errors. make: Target 'drivers/s390/crypto/' not remade because of errors.
cvise spits out:
$ cat ap_queue.i __int128 ap_dqap_resgr0_rp2_0; ap_dqap_resgr0() { asm("0: ltgr %N[rp2],%N[rp2]\n" : [rp2] "+&d"(ap_dqap_resgr0_rp2_0)); } $ clang -O2 --target=s390x-linux-gnu -c -o /dev/null ap_queue.i clang: /home/nathan/cbl/github/tc-build/llvm-project/llvm/lib/CodeGen/MachineRegisterInfo.cpp:285: void llvm::MachineRegisterInfo::addRegOperandToUseList(llvm::MachineOperand *): Assertion `Last && "Inconsistent use list"' failed. ...
Comment Actions
Thank you for the bugreport and reduced test case!
Suggested bugfix: https://reviews.llvm.org/D105757.