[all-commits] [llvm/llvm-project] 556d8a: [CodeGen] Refactor and document ThunkInserter (#97...

Anatoly Trosinenko via All-commits all-commits at lists.llvm.org
Thu Jul 4 07:23:35 PDT 2024


  Branch: refs/heads/users/atrosinenko/aarch64-sls-hardening
  Home:   https://github.com/llvm/llvm-project
  Commit: 556d8a339fbff87557e17478e52de29ed7bd3b9a
      https://github.com/llvm/llvm-project/commit/556d8a339fbff87557e17478e52de29ed7bd3b9a
  Author: Anatoly Trosinenko <atrosinenko at accesssoftek.com>
  Date:   2024-07-04 (Thu, 04 Jul 2024)

  Changed paths:
    M llvm/include/llvm/CodeGen/IndirectThunks.h
    M llvm/lib/Target/AArch64/AArch64SLSHardening.cpp
    M llvm/lib/Target/ARM/ARMSLSHardening.cpp
    M llvm/lib/Target/X86/X86IndirectThunks.cpp

  Log Message:
  -----------
  [CodeGen] Refactor and document ThunkInserter (#97468)

In preparation for supporting BLRA* instructions in SLS Hardening on
AArch64, refactor ThunkInserter class.

The main intention of this commit is to document the way to merge the
BLR-rewriting logic of the AArch64SLSHardening pass into the
SLSBLRThunkInserter class. This makes it possible to only call
createThunkFunction for the thunks that are actually referenced.
Ultimately, it will prevent SLSBLRThunkInserter from unconditionally
generating about 1800 thunk functions corresponding to every possible
combination of operands passed to BLRAA or BLRAB instructions.

This particular commit does not affect the generated machine code and
consists of the following changes:
* document the existing behavior of ThunkInserter class
* introduce ThunkInserterPass template class to get rid of mostly
identical boilerplate code in ARM, AArch64 and X86 implementations
* move the InsertedThunks parameter from `mayUseThunk` to `insertThunks`
method


  Commit: 29d6b4419ab0efb6285a07b471f026f2b22686ae
      https://github.com/llvm/llvm-project/commit/29d6b4419ab0efb6285a07b471f026f2b22686ae
  Author: Anatoly Trosinenko <atrosinenko at accesssoftek.com>
  Date:   2024-07-04 (Thu, 04 Jul 2024)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64.h
    M llvm/lib/Target/AArch64/AArch64SLSHardening.cpp
    M llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
    M llvm/test/CodeGen/AArch64/O0-pipeline.ll
    M llvm/test/CodeGen/AArch64/O3-pipeline.ll
    M llvm/test/CodeGen/AArch64/arm64-opt-remarks-lazy-bfi.ll
    M llvm/test/CodeGen/AArch64/speculation-hardening-sls-blr-bti.mir
    M llvm/test/CodeGen/AArch64/speculation-hardening-sls-blr.mir

  Log Message:
  -----------
  [AArch64] Only create called thunks when hardening against SLS

In preparation for implementing hardening of BLRA* instructions,
restrict thunk function generation to only the thunks being actually
called from any function. As described in the existing comments,
emitting all possible thunks for BLRAA and BLRAB instructions would
mean adding about 1800 functions in total, most of which are likely
not to be called.

This commit merges AArch64SLSHardening class into SLSBLRThunkInserter,
so thunks can be created as needed while rewriting a machine function.
The usages of TII, TRI and ST fields of AArch64SLSHardening class are
replaced with requesting them in-place, as ThunkInserter assumes
multiple "entry points" in contrast to the only runOnMachineFunction
method of AArch64SLSHardening.

The runOnMachineFunction method essentially replaces pre-existing
insertThunks implementation as there is no more need to insert all
possible thunks unconditionally. Instead, thunks are created on first
use from inside of insertThunks method.


Compare: https://github.com/llvm/llvm-project/compare/05033851807a...29d6b4419ab0

To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list