[all-commits] [llvm/llvm-project] c9017b: [X86] Support EGPR (R16-R31) for APX (#70958)

Shengchen Kan via All-commits all-commits at lists.llvm.org
Thu Nov 9 07:39:53 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: c9017bc79397e12734b58165273ae70f328d0002
      https://github.com/llvm/llvm-project/commit/c9017bc79397e12734b58165273ae70f328d0002
  Author: Shengchen Kan <shengchen.kan at intel.com>
  Date:   2023-11-09 (Thu, 09 Nov 2023)

  Changed paths:
    M llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h
    M llvm/lib/Target/X86/X86.td
    M llvm/lib/Target/X86/X86InstrInfo.cpp
    M llvm/lib/Target/X86/X86InstrInfo.h
    M llvm/lib/Target/X86/X86RegisterInfo.cpp
    M llvm/lib/Target/X86/X86RegisterInfo.td
    M llvm/test/CodeGen/MIR/X86/inline-asm-registers.mir
    A llvm/test/CodeGen/X86/apx/mul-i1024.ll
    A llvm/test/CodeGen/X86/apx/no-rex2-general.ll
    A llvm/test/CodeGen/X86/apx/no-rex2-pseudo-amx.ll
    A llvm/test/CodeGen/X86/apx/no-rex2-pseudo-x87.ll
    A llvm/test/CodeGen/X86/apx/no-rex2-special.ll
    M llvm/test/CodeGen/X86/ipra-reg-usage.ll
    M llvm/test/CodeGen/X86/musttail-varargs.ll
    M llvm/test/CodeGen/X86/statepoint-invoke-ra-enter-at-end.mir
    M llvm/test/MC/AsmParser/seh-directive-errors.s
    A llvm/test/MC/X86/apx/cfi-reg.s

  Log Message:
  -----------
  [X86] Support EGPR (R16-R31) for APX (#70958)

1. Map R16-R31 to DWARF registers 130-145.
2. Make R16-R31 caller-saved registers.
3. Make R16-31 allocatable only when feature EGPR is supported
4. Make R16-31 availabe for instructions in legacy maps 0/1 and EVEX
space, except XSAVE*/XRSTOR

RFC:

https://discourse.llvm.org/t/rfc-design-for-apx-feature-egpr-and-ndd-support/73031/4

Explanations for some seemingly unrelated changes:

inline-asm-registers.mir, statepoint-invoke-ra-enter-at-end.mir:
The immediate (TargetInstrInfo.cpp:1612) used for the regdef/reguse is
the encoding for the register
  class in the enum generated by tablegen. This encoding will change
  any time a new register class is added. Since the number is part
  of the input, this means it can become stale.

seh-directive-errors.s:
   R16-R31 makes ".seh_pushreg 17" legal

musttail-varargs.ll:
It seems some LLVM passes use the number of registers rather the number
of allocatable registers as heuristic.

This PR is to reland #67702 after #70222 in order to reduce some
compile-time regression when EGPR is not used.




More information about the All-commits mailing list