rs6000: Add Dense Math (DMF/MMA+) built-in/instruction support
Adds support for new Dense Math Facility (DMF) and MMA+ instructions on PowerPC.
This patch introduces support for the Dense Math Facility (DMF) and Matrix-Multiply Assist Plus (MMA+) instructions, expected on future Power processors. It extends the existing MMA infrastructure to include Dense Math Registers (DMRs). Key changes include increasing the maximum number of MMA operands, adding new UNSPEC types for DMR XOR and outer product operations, implementing new instruction patterns in mma.md, and introducing new DMF built-ins with updated GIMPLE folding. Documentation for these new features is also included.
In Details
This commit significantly expands the rs6000 backend's support for advanced matrix operations on upcoming Power processors by integrating the Dense Math Facility (DMF) and MMA+. It modifies config/rs6000/mma.md to accommodate up to 9 operands (MAX_MMA_OPERANDS), defines new UNSPEC macros for DMR operations (UNSPEC_DMF_DMXOR, UNSPEC_DMF_DMXVI8GERX4*, etc.), and adds instruction patterns. It also introduces new GIMPLE built-ins for these operations, ensuring proper handling of DMRs, including their pass-by-reference semantics in user-facing builtins and pass-by-value internally for…
- rs6000
- GCC's target identifier for IBM PowerPC and Power Architecture processors.
- Dense Math Facility (DMF)
- A hardware feature on certain PowerPC processors designed to accelerate dense matrix operations through specialized instructions and registers.
- MMA+
- Matrix-Multiply Assist Plus, an enhancement to the existing Matrix Multiply-Accumulate instructions, likely offering improved performance or functionality.
- DMR
- Dense Math Register, a specialized register file on some PowerPC processors designed for high-performance matrix and floating-point operations.
- Built-ins
- Compiler-recognized functions that map directly to specific hardware instructions or sequences, providing a way to access low-level hardware features from high-level code.
- GIMPLE
- GCC's internal three-address intermediate representation, used for performing optimizations.
- UNSPEC
- An internal GCC construct representing an "unspecified operation" that is specific to a particular machine or optimization pass.