[all-commits] [llvm/llvm-project] f23066: [X86] Add ACE v1 (AI Compute Extensions) support

Ganesh via All-commits all-commits at lists.llvm.org
Mon Sep 21 16:20:50 PDT 2026


  Branch: refs/heads/users/ganeshgit/X86ACEV1
  Home:   https://github.com/llvm/llvm-project
  Commit: f230665c970b48f6a7832605bd61100b48397aeb
      https://github.com/llvm/llvm-project/commit/f230665c970b48f6a7832605bd61100b48397aeb
  Author: Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian at amd.com>
  Date:   2026-09-21 (Mon, 21 Sep 2026)

  Changed paths:
    M clang/include/clang/Basic/BuiltinsX86_64.td
    M clang/include/clang/Options/Options.td
    M clang/lib/Basic/Targets/X86.cpp
    M clang/lib/Basic/Targets/X86.h
    M clang/lib/Headers/CMakeLists.txt
    A clang/lib/Headers/acev1intrin.h
    M clang/lib/Headers/cpuid.h
    M clang/lib/Headers/immintrin.h
    M clang/lib/Sema/SemaX86.cpp
    A clang/test/CodeGen/X86/ace-api.c
    A clang/test/CodeGen/X86/ace-builtins.c
    A clang/test/CodeGen/X86/ace-inline-asm.c
    A clang/test/CodeGen/X86/acev1.c
    A clang/test/CodeGen/X86/acev1_api.c
    A clang/test/CodeGen/X86/acev1_bsr.c
    A clang/test/CodeGen/X86/acev1_errors.c
    A clang/test/CodeGen/X86/acev1_inline_asm.c
    A clang/test/CodeGen/X86/acev1_mxfp8.c
    A clang/test/CodeGen/X86/acev1_tile_movement.c
    M clang/test/CodeGen/attr-target-x86.c
    M clang/test/Preprocessor/x86_target_features.c
    M llvm/include/llvm/IR/IntrinsicsX86.td
    M llvm/include/llvm/TargetParser/X86TargetParser.def
    M llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86ATTInstPrinter.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86ATTInstPrinter.h
    M llvm/lib/Target/X86/MCTargetDesc/X86IntelInstPrinter.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86IntelInstPrinter.h
    M llvm/lib/Target/X86/X86.td
    M llvm/lib/Target/X86/X86ExpandPseudo.cpp
    M llvm/lib/Target/X86/X86FastPreTileConfig.cpp
    M llvm/lib/Target/X86/X86FastTileConfig.cpp
    M llvm/lib/Target/X86/X86FrameLowering.cpp
    M llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
    M llvm/lib/Target/X86/X86ISelLowering.cpp
    A llvm/lib/Target/X86/X86InstrACE.td
    M llvm/lib/Target/X86/X86InstrAMX.td
    M llvm/lib/Target/X86/X86InstrInfo.cpp
    M llvm/lib/Target/X86/X86InstrInfo.td
    M llvm/lib/Target/X86/X86InstrPredicates.td
    M llvm/lib/Target/X86/X86LowerAMXType.cpp
    M llvm/lib/Target/X86/X86LowerTileCopy.cpp
    M llvm/lib/Target/X86/X86MachineFunctionInfo.cpp
    M llvm/lib/Target/X86/X86MachineFunctionInfo.h
    M llvm/lib/Target/X86/X86PreTileConfig.cpp
    M llvm/lib/Target/X86/X86RegisterInfo.cpp
    M llvm/lib/Target/X86/X86RegisterInfo.td
    M llvm/lib/Target/X86/X86TileConfig.cpp
    M llvm/lib/TargetParser/X86TargetParser.cpp
    A llvm/test/CodeGen/X86/ACE/ace-intrinsics.ll
    A llvm/test/CodeGen/X86/ACE/acev1-greedy-ra.ll
    A llvm/test/CodeGen/X86/ACE/acev1-outer-product.ll
    A llvm/test/CodeGen/X86/ACE/acev1-tile-basic.ll
    M llvm/test/CodeGen/X86/ipra-reg-usage.ll
    A llvm/test/MC/X86/ACE/ace-att.s
    A llvm/test/MC/X86/ACE/ace-error.s
    A llvm/test/MC/X86/ACE/ace-intel.s
    M llvm/test/TableGen/x86-fold-tables.inc

  Log Message:
  -----------
  [X86] Add ACE v1 (AI Compute Extensions) support

ACE v1 introduces new tile-based matrix operations with fixed 16x64
tile dimensions (Palette 2), unlike AMX's configurable dimensions.

Key features:
- New __acetile type with fixed 16x64 dimensions
- __tile_ace_* intrinsics for ACE tile operations
- Outer product instructions: TOP4BUUD, TOP4BUSD, TOP4BSSD, TOP4BSUD, TOP2BF16PS
- Mixed precision FP8 instructions: TOP4MX variants
- Tile movement: TILEMOVROW, TILEMOVCOL for ZMM<->tile transfers
- BSR (Block Scale Register) operations for scaling factors
- ACE tile spill/reload using TILEMOVROW + VMOVUPS row-by-row
  (ACE doesn't have TILELOADD/TILESTORED instructions)

Backend changes:
- X86LowerTileCopy handles ACE tile copies
- X86PreTileConfig/X86FastPreTileConfig for ACE register allocation
- Palette 2 tile configuration support

Reused from AMX:
- The x86_amx type
- AMX-AVX512f definitions and TILE instruction definitions
- Passes for lowering and handling the x86_amx type
- Wrappers internally use rows and cols to use amx definitions

This PR builds on PR #206888 and should be reviewed after/with it.


  Commit: 096571a9dfc982b9a4595ed613f58e59e6c57aa3
      https://github.com/llvm/llvm-project/commit/096571a9dfc982b9a4595ed613f58e59e6c57aa3
  Author: Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian at amd.com>
  Date:   2026-09-21 (Mon, 21 Sep 2026)

  Changed paths:
    M clang/include/clang/Basic/BuiltinsX86_64.td
    M clang/lib/Headers/acev1intrin.h
    M clang/lib/Sema/SemaX86.cpp
    R clang/test/CodeGen/X86/ace-api.c
    R clang/test/CodeGen/X86/ace-builtins.c
    R clang/test/CodeGen/X86/ace-inline-asm.c
    M clang/test/CodeGen/X86/acev1.c
    M clang/test/CodeGen/X86/acev1_api.c
    M clang/test/CodeGen/X86/acev1_bsr.c
    M clang/test/CodeGen/X86/acev1_errors.c
    M clang/test/CodeGen/X86/acev1_inline_asm.c
    M clang/test/CodeGen/X86/acev1_mxfp8.c
    M clang/test/CodeGen/X86/acev1_tile_movement.c
    M clang/test/CodeGen/attr-target-x86.c
    M clang/test/Preprocessor/x86_target_features.c
    M llvm/include/llvm/IR/IntrinsicsX86.td
    M llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
    M llvm/lib/Target/X86/X86.td
    M llvm/lib/Target/X86/X86FastPreTileConfig.cpp
    M llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
    M llvm/lib/Target/X86/X86ISelLowering.cpp
    M llvm/lib/Target/X86/X86InstrACE.td
    M llvm/lib/Target/X86/X86InstrInfo.cpp
    M llvm/lib/Target/X86/X86LowerAMXType.cpp
    M llvm/lib/Target/X86/X86LowerTileCopy.cpp
    M llvm/lib/Target/X86/X86RegisterInfo.cpp
    M llvm/lib/TargetParser/X86TargetParser.cpp
    R llvm/test/CodeGen/X86/ACE/ace-intrinsics.ll
    R llvm/test/CodeGen/X86/ACE/acev1-greedy-ra.ll
    R llvm/test/CodeGen/X86/ACE/acev1-outer-product.ll
    R llvm/test/CodeGen/X86/ACE/acev1-tile-basic.ll
    A llvm/test/CodeGen/X86/ACEV1/acev1-greedy-ra.ll
    A llvm/test/CodeGen/X86/ACEV1/acev1-intrinsics.ll
    A llvm/test/CodeGen/X86/ACEV1/acev1-outer-product.ll
    A llvm/test/CodeGen/X86/ACEV1/acev1-tile-O0.ll
    A llvm/test/CodeGen/X86/ACEV1/acev1-tile-basic.ll
    A llvm/test/CodeGen/X86/ACEV1/acev1-tile-spill.ll
    A llvm/test/MC/Disassembler/X86/acev1.txt
    R llvm/test/MC/X86/ACE/ace-att.s
    R llvm/test/MC/X86/ACE/ace-error.s
    R llvm/test/MC/X86/ACE/ace-intel.s
    A llvm/test/MC/X86/ACEV1/acev1-att.s
    A llvm/test/MC/X86/ACEV1/acev1-error.s
    A llvm/test/MC/X86/ACEV1/acev1-intel.s

  Log Message:
  -----------
  Address review comments

- Rename the ACE tests and directories to acev1 for consistency
- Build acev1 on top of avx10.1 rather than avx10.2
- Fix test encodings and the BSR0 implicit defs
- Make the scale register type consistent with the spec
- Add memory operand tests for bsrmov
- Confirm the ACEV1 ISA implication chain
- Take the outer product ZMM sources by value instead of by register ID,
  so they are allocated conventionally, and mark the 512-bit ACE builtins
  with RequiredVectorWidth<512>
- Use pseudos for SPILL and RELOAD. Spills use scratch zmm. Don't use
  non-ace ISA.
- Fix missing vector r/m in MRMSrcReg4VOp3.


  Commit: f53c0f91225127347eff3805bf7397de0673745b
      https://github.com/llvm/llvm-project/commit/f53c0f91225127347eff3805bf7397de0673745b
  Author: Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian at amd.com>
  Date:   2026-09-21 (Mon, 21 Sep 2026)

  Changed paths:
    M clang/include/clang/Basic/BuiltinsX86_64.td
    M clang/include/clang/Basic/DiagnosticSemaKinds.td
    M clang/include/clang/Options/Options.td
    M clang/include/clang/Sema/SemaX86.h
    M clang/lib/Basic/Targets/X86.cpp
    M clang/lib/Headers/acev1intrin.h
    M clang/lib/Sema/SemaX86.cpp
    M clang/test/CodeGen/X86/acev1.c
    M clang/test/CodeGen/X86/acev1_api.c
    M clang/test/CodeGen/X86/acev1_bsr.c
    M clang/test/CodeGen/X86/acev1_errors.c
    A clang/test/CodeGen/X86/acev1_feature_errors.c
    M clang/test/CodeGen/X86/acev1_inline_asm.c
    R clang/test/CodeGen/X86/acev1_mxfp8.c
    M clang/test/CodeGen/X86/acev1_tile_movement.c
    M clang/test/Driver/x86-target-features.c
    M clang/test/Preprocessor/x86_target_features.c
    M llvm/include/llvm/IR/IntrinsicsX86.td
    M llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86ATTInstPrinter.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86ATTInstPrinter.h
    M llvm/lib/Target/X86/MCTargetDesc/X86IntelInstPrinter.cpp
    M llvm/lib/Target/X86/MCTargetDesc/X86IntelInstPrinter.h
    M llvm/lib/Target/X86/X86.td
    M llvm/lib/Target/X86/X86ExpandPseudo.cpp
    M llvm/lib/Target/X86/X86FastPreTileConfig.cpp
    M llvm/lib/Target/X86/X86ISelLowering.cpp
    M llvm/lib/Target/X86/X86InstrACE.td
    M llvm/lib/Target/X86/X86LowerAMXType.cpp
    M llvm/lib/Target/X86/X86LowerTileCopy.cpp
    M llvm/lib/Target/X86/X86RegisterInfo.cpp
    M llvm/lib/Target/X86/X86RegisterInfo.td
    M llvm/lib/TargetParser/X86TargetParser.cpp
    M llvm/test/CodeGen/X86/ACEV1/acev1-greedy-ra.ll
    M llvm/test/CodeGen/X86/ACEV1/acev1-intrinsics.ll
    M llvm/test/CodeGen/X86/ACEV1/acev1-outer-product.ll
    M llvm/test/CodeGen/X86/ACEV1/acev1-tile-basic.ll
    M llvm/test/CodeGen/X86/ACEV1/acev1-tile-spill.ll
    M llvm/test/MC/X86/ACEV1/acev1-att.s
    M llvm/test/MC/X86/ACEV1/acev1-error.s
    M llvm/test/MC/X86/ACEV1/acev1-intel.s

  Log Message:
  -----------
  [X86][ACEV1] Address review comments

- Drop the AMX_TILE dependency; under acev1 enable only the AMX
  instructions that ACE v1 actually shares.
- Namespace the ACE-invented intrinsics under llvm.x86.acev1.* and leave
  the shared AMX-AVX512 ones in the flat llvm.x86.* namespace.
- Sync the public intrinsic and builtin names with GCC, and add the
  helper macros from the ACE v1 spec.
- Tighten Sema checking of the outer-product group bits, and add driver,
  preprocessor and feature-error test coverage.
- Spell BSR0 literally in the AsmStrings with Defs/Uses instead of
  carrying it as a custom operand, which removes the bespoke handling
  from X86AsmParser and both instruction printers.
- Drop the unused BSR register class; like TMMCFG, BSR0 needs only its
  X86Reg definition and the getReservedRegs entry.
- Adopt the operand-type record naming convention, 't' for a TILE and
  'e' for a GR32 index, on both the instructions and their pseudos,
  retiring the ad-hoc _REG suffix.
- Use WriteSystem rather than WriteVecLogic for the tile outer products
  and the BSR moves.
- Pass tiles by pointer in the unit tests, and drop comments that only
  restate the code.


Compare: https://github.com/llvm/llvm-project/compare/6afc0729617a...f53c0f912251

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