[llvm] [TableGen] Complete the support for artificial registers (PR #183371)

Mikael Holmen via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 9 22:56:08 PDT 2026


================
@@ -2444,6 +2488,8 @@ void CodeGenRegBank::inferMatchingSuperRegClass(
     TopoSigs.reset();
     for (const CodeGenRegister *Super : RC->getMembers()) {
       const CodeGenRegister *Sub = Super->getSubRegs().find(SubIdx)->second;
----------------
mikaelholmen wrote:

It still fails with
```Error: attempt to dereference a past-the-end iterator.```
at main commit 48473ddcc75b49, which includes #185448.

If I do
```
     for (const CodeGenRegister *Super : RC->getMembers()) {
+      assert(Super->getSubRegs().find(SubIdx) != Super->getSubRegs().end());
       const CodeGenRegister *Sub = Super->getSubRegs().find(SubIdx)->second;
       if (Super->Artificial)
         continue;
```
the assert fails:
```
FAILED: lib/Target/AMDGPU/AMDGPUGenRegisterBank.inc /repo/llvm/llvm/build-all-gcc132-expensive/lib/Target/AMDGPU/AMDGPUGenRegisterBank.inc 
cd /repo/llvm/llvm/build-all-gcc132-expensive/lib/Target/AMDGPU && /repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen -gen-register-bank -I/repo/llvm/llvm/lib/Target/AMDGPU -I/repo/llvm/llvm/build-all-gcc132-expensive/include -I/repo/llvm/llvm/include -I /repo/llvm/llvm/lib/Target /repo/llvm/llvm/lib/Target/AMDGPU/AMDGPU.td --write-if-changed -o AMDGPUGenRegisterBank.inc -d AMDGPUGenRegisterBank.inc.d && [...]/RHEL8-x86_64/cmake/3.27.2/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /repo/llvm/llvm /repo/llvm/llvm/lib/Target/AMDGPU /repo/llvm/llvm/build-all-gcc132-expensive /repo/llvm/llvm/build-all-gcc132-expensive/lib/Target/AMDGPU /repo/llvm/llvm/build-all-gcc132-expensive/lib/Target/AMDGPU/AMDGPUGenRegisterBank.inc.d /repo/llvm/llvm/build-all-gcc132-expensive/CMakeFiles/d/545644eee70c0eb98536753a2817404372892468aefbec957dcd483f520d8626.d
llvm-tblgen: ../utils/TableGen/Common/CodeGenRegisters.cpp:2488: void llvm::CodeGenRegBank::inferMatchingSuperRegClass(llvm::CodeGenRegisterClass*, std::__debug::list<llvm::CodeGenRegisterClass>::iterator): Assertion `Super->getSubRegs().find(SubIdx) != Super->getSubRegs().end()' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0.	Program arguments: /repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen -gen-register-bank -I/repo/llvm/llvm/lib/Target/AMDGPU -I/repo/llvm/llvm/build-all-gcc132-expensive/include -I/repo/llvm/llvm/include -I /repo/llvm/llvm/lib/Target /repo/llvm/llvm/lib/Target/AMDGPU/AMDGPU.td --write-if-changed -o AMDGPUGenRegisterBank.inc -d AMDGPUGenRegisterBank.inc.d
 #0 0x0000000000b5e6ae llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0xb5e6ae)
 #1 0x0000000000b5b52b llvm::sys::RunSignalHandlers() (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0xb5b52b)
 #2 0x0000000000b5b66e SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f5df0437990 __restore_rt (/lib64/libpthread.so.0+0x12990)
 #4 0x00007f5deddcf52f raise (/lib64/libc.so.6+0x4e52f)
 #5 0x00007f5dedda2e65 abort (/lib64/libc.so.6+0x21e65)
 #6 0x00007f5dedda2d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
 #7 0x00007f5deddc7e86 (/lib64/libc.so.6+0x46e86)
 #8 0x0000000000629653 (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0x629653)
 #9 0x000000000062987d llvm::CodeGenRegBank::computeInferredRegisterClasses() (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0x62987d)
#10 0x000000000066d4be llvm::CodeGenRegBank::CodeGenRegBank(llvm::RecordKeeper const&, llvm::CodeGenHwModes const&, bool) (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0x66d4be)
#11 0x00000000006b997a llvm::CodeGenTarget::getRegBank() const (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0x6b997a)
#12 0x00000000009baa52 (anonymous namespace)::RegisterBankEmitter::run(llvm::raw_ostream&) RegisterBankEmitter.cpp:0:0
#13 0x00000000009be599 llvm::TableGen::Emitter::OptClass<(anonymous namespace)::RegisterBankEmitter>::run(llvm::StringRef, llvm::RecordKeeper const&) RegisterBankEmitter.cpp:0:0
#14 0x0000000000baf75a llvm::TableGen::Emitter::ApplyCallback(llvm::RecordKeeper const&, llvm::TableGenOutputFiles&, llvm::StringRef) (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0xbaf75a)
#15 0x0000000000b72f46 llvm::TableGenMain(char const*, llvm::function_ref<bool (llvm::TableGenOutputFiles&, llvm::RecordKeeper const&)>) (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0xb72f46)
#16 0x00000000004a0623 tblgen_main(int, char**) (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0x4a0623)
#17 0x00007f5deddbb7e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#18 0x000000000040cd9e _start (/repo/llvm/llvm/build-all-gcc132-expensive/bin/llvm-tblgen+0x40cd9e)
```


https://github.com/llvm/llvm-project/pull/183371


More information about the llvm-commits mailing list