LLVM 24.0.0git
SIPeepholeSDWA.cpp File Reference
#include "SIPeepholeSDWA.h"
#include "AMDGPU.h"
#include "GCNSubtarget.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include <optional>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "si-peephole-sdwa"

Functions

 STATISTIC (NumSDWAPatternsFound, "Number of SDWA patterns found.")
 STATISTIC (NumSDWAInstructionsPeepholed, "Number of instruction converted to SDWA.")
static raw_ostream & operator<< (raw_ostream &OS, SdwaSel Sel)
static raw_ostream & operator<< (raw_ostream &OS, const DstUnused &Un)
static void copyRegOperand (MachineOperand &To, const MachineOperand &From)
static bool isSameReg (const MachineOperand &LHS, const MachineOperand &RHS)
static MachineOperand * findSingleRegUse (const MachineOperand *Reg, const MachineRegisterInfo *MRI)
static MachineOperand * findSingleRegDef (const MachineOperand *Reg, const MachineRegisterInfo *MRI)
static std::optional< SdwaSel > combineSdwaSrcSel (SdwaSel Sel, SdwaSel OperandSel)
 Combine an SDWA source instruction's existing source selection Sel with the SDWA selection OperandSel of its operand.
static bool canCombineOpSel (const MachineInstr &MI, const SIInstrInfo *TII, AMDGPU::OpName SrcOpName, AMDGPU::OpName SrcSelOpName, MachineOperand *Op, SdwaSel OpSel)
 Verify that Op is the same register as the operand of the SDWA instruction MI named by SrcOpName and that the SDWA selection SrcSelOpName can be combined with the OpSel.
static raw_ostream & operator<< (raw_ostream &OS, const SDWAOperand &Operand)

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "si-peephole-sdwa"

Definition at line 31 of file SIPeepholeSDWA.cpp.

Function Documentation

◆ canCombineOpSel()

bool canCombineOpSel ( const MachineInstr & MI,
const SIInstrInfo * TII,
AMDGPU::OpName SrcOpName,
AMDGPU::OpName SrcSelOpName,
MachineOperand * Op,
SdwaSel OpSel )
static

Verify that Op is the same register as the operand of the SDWA instruction MI named by SrcOpName and that the SDWA selection SrcSelOpName can be combined with the OpSel.

Definition at line 512 of file SIPeepholeSDWA.cpp.

References assert(), combineSdwaSrcSel(), isSameReg(), MI, and TII.

◆ combineSdwaSrcSel()

std::optional< SdwaSel > combineSdwaSrcSel ( SdwaSel Sel,
SdwaSel OperandSel )
static

Combine an SDWA source instruction's existing source selection Sel with the SDWA selection OperandSel of its operand.

If the selections are compatible, return the combined selection, otherwise return a nullopt. This applies to src_sel only. Extracting from an already extracted field is again a single field, but dst_sel writes a field and leaves the rest to dst_unused, so two of them do not fold into one. See SDWADstOperand::canCombineSelections. For example, if we have Sel = BYTE_0 Sel and OperandSel = WORD_1: BYTE_0 Sel (WORD_1 Sel (X)) -> BYTE_2 Sel (X)

Definition at line 317 of file SIPeepholeSDWA.cpp.

Referenced by canCombineOpSel().

◆ copyRegOperand()

◆ findSingleRegDef()

MachineOperand * findSingleRegDef ( const MachineOperand * Reg,
const MachineRegisterInfo * MRI )
static

Definition at line 299 of file SIPeepholeSDWA.cpp.

References llvm::MachineRegisterInfo::getOneDef(), and Reg.

◆ findSingleRegUse()

MachineOperand * findSingleRegUse ( const MachineOperand * Reg,
const MachineRegisterInfo * MRI )
static

Definition at line 291 of file SIPeepholeSDWA.cpp.

References llvm::MachineRegisterInfo::getOneNonDBGUse(), and Reg.

◆ isSameReg()

bool isSameReg ( const MachineOperand & LHS,
const MachineOperand & RHS )
static

Definition at line 284 of file SIPeepholeSDWA.cpp.

References LHS, and RHS.

Referenced by canCombineOpSel().

◆ operator<<() [1/3]

◆ operator<<() [2/3]

raw_ostream & operator<< ( raw_ostream & OS,
const SDWAOperand & Operand )
static

Definition at line 983 of file SIPeepholeSDWA.cpp.

◆ operator<<() [3/3]

◆ STATISTIC() [1/2]

STATISTIC ( NumSDWAInstructionsPeepholed ,
"Number of instruction converted to SDWA."  )

References MBB, MI, TII, and TRI.

◆ STATISTIC() [2/2]

STATISTIC ( NumSDWAPatternsFound ,
"Number of SDWA patterns found."  )