LLVM 22.0.0git
|
#include "SIPeepholeSDWA.h"
#include "AMDGPU.h"
#include "GCNSubtarget.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "llvm/ADT/MapVector.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 > | combineSdwaSel (SdwaSel Sel, SdwaSel OperandSel) |
Combine an SDWA instruction's existing SDWA selection Sel with the SDWA selection OperandSel of its operand. | |
static bool | canCombineOpSel (const MachineInstr &MI, const SIInstrInfo *TII, AMDGPU::OpName SrcSelOpName, SdwaSel OpSel) |
Verify that the SDWA selection operand SrcSelOpName of the SDWA instruction MI can be combined with the selection OpSel . | |
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) |
#define DEBUG_TYPE "si-peephole-sdwa" |
Definition at line 33 of file SIPeepholeSDWA.cpp.
|
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 515 of file SIPeepholeSDWA.cpp.
References assert(), canCombineOpSel(), isSameReg(), MI, and TII.
|
static |
Verify that the SDWA selection operand SrcSelOpName
of the SDWA instruction MI
can be combined with the selection OpSel
.
Definition at line 502 of file SIPeepholeSDWA.cpp.
References assert(), combineSdwaSel(), llvm::MachineOperand::getImm(), MI, and TII.
Referenced by canCombineOpSel().
Combine an SDWA instruction's existing SDWA selection Sel
with the SDWA selection OperandSel
of its operand.
If the selections are compatible, return the combined selection, otherwise return a nullopt. 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 311 of file SIPeepholeSDWA.cpp.
Referenced by canCombineOpSel().
|
static |
Definition at line 270 of file SIPeepholeSDWA.cpp.
References assert(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::MachineOperand::isDead(), llvm::MachineOperand::isKill(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUndef(), llvm::MachineOperand::isUse(), llvm::MachineOperand::setIsDead(), llvm::MachineOperand::setIsKill(), llvm::MachineOperand::setIsUndef(), llvm::MachineOperand::setReg(), and llvm::MachineOperand::setSubReg().
|
static |
Definition at line 297 of file SIPeepholeSDWA.cpp.
|
static |
Definition at line 289 of file SIPeepholeSDWA.cpp.
|
static |
Definition at line 282 of file SIPeepholeSDWA.cpp.
Referenced by canCombineOpSel().
|
static |
Definition at line 237 of file SIPeepholeSDWA.cpp.
References llvm::AMDGPU::SDWA::UNUSED_PAD, llvm::AMDGPU::SDWA::UNUSED_PRESERVE, and llvm::AMDGPU::SDWA::UNUSED_SEXT.
|
static |
Definition at line 972 of file SIPeepholeSDWA.cpp.
|
static |
Definition at line 224 of file SIPeepholeSDWA.cpp.
References llvm::AMDGPU::SDWA::BYTE_0, llvm::AMDGPU::SDWA::BYTE_1, llvm::AMDGPU::SDWA::BYTE_2, llvm::AMDGPU::SDWA::BYTE_3, llvm::AMDGPU::SDWA::DWORD, llvm::AMDGPU::SDWA::WORD_0, and llvm::AMDGPU::SDWA::WORD_1.
STATISTIC | ( | NumSDWAInstructionsPeepholed | , |
"Number of instruction converted to SDWA." | ) |
STATISTIC | ( | NumSDWAPatternsFound | , |
"Number of SDWA patterns found." | ) |