From d218b6dece5d492e3a258524f4679b17c5d565d8 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 8 Nov 2023 15:27:11 +0100 Subject: [PATCH] [X86] Return more accurate getNumSupportedRegs() (NFC) https://github.com/llvm/llvm-project/pull/70222 introduces a hook to return a more accurate number of registers supported for a specific subtarget (rather than target). However, while x86 registers were reordered to allow using this, the implementation still always returned NUM_TARGET_REGS. Adjust it to return a smaller number of registers depending on availability of avx/avx512/amx. --- llvm/lib/Target/X86/X86RegisterInfo.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp index 4fd8b6d17e862..b0bea42cafe11 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.cpp +++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp @@ -634,7 +634,15 @@ unsigned X86RegisterInfo::getNumSupportedRegs(const MachineFunction &MF) const { (X86::K6_K7 + 1 == X86::TMMCFG) && (X86::TMM7 + 1 == X86::NUM_TARGET_REGS) && "Register number may be incorrect"); - return X86::NUM_TARGET_REGS; + + const X86Subtarget &ST = MF.getSubtarget(); + if (ST.hasAMXTILE()) + return X86::TMM7 + 1; + if (ST.hasAVX512()) + return X86::K6_K7 + 1; + if (ST.hasAVX()) + return X86::YMM15 + 1; + return X86::R15WH + 1; } bool X86RegisterInfo::isArgumentRegister(const MachineFunction &MF,