Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
AArch64MacroFusion.cpp File Reference

Go to the source code of this file.

Functions

static bool isArithmeticBccPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI, bool CmpOnly)
 CMN, CMP, TST followed by Bcc.
static bool isArithmeticCbzPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 ALU operations followed by CBZ/CBNZ.
static bool isAESPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 AES crypto encoding or decoding.
static bool isCryptoEORPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 AESE/AESD/PMULL + EOR.
static bool isAdrpAddPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
static bool isLiteralsPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 Literal generation.
static bool isAddressLdStPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 Fuse address generation and loads or stores.
static bool isCmpCSelPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 Compare and conditional select.
static bool isCmpCSetPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 Compare and cset.
static bool isArithmeticLogicPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
static bool isAddSub2RegAndConstOnePair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
static bool shouldScheduleAdjacent (const TargetInstrInfo &TII, const TargetSubtargetInfo &TSI, const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 Check if the instr pair, FirstMI and SecondMI, should be fused together.

Function Documentation

◆ isAddressLdStPair()

bool isAddressLdStPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

Fuse address generation and loads or stores.

Definition at line 198 of file AArch64MacroFusion.cpp.

References llvm::MachineOperand::getImm(), llvm::MachineInstr::getOpcode(), and llvm::MachineInstr::getOperand().

Referenced by shouldScheduleAdjacent().

◆ isAddSub2RegAndConstOnePair()

◆ isAdrpAddPair()

bool isAdrpAddPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

Definition at line 161 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isAESPair()

bool isAESPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

AES crypto encoding or decoding.

Definition at line 121 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isArithmeticBccPair()

bool isArithmeticBccPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI,
bool CmpOnly )
static

◆ isArithmeticCbzPair()

bool isArithmeticCbzPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

ALU operations followed by CBZ/CBNZ.

Definition at line 71 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isArithmeticLogicPair()

bool isArithmeticLogicPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

Definition at line 317 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isCmpCSelPair()

bool isCmpCSelPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

Compare and conditional select.

Definition at line 240 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::definesRegister(), and llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isCmpCSetPair()

◆ isCryptoEORPair()

bool isCryptoEORPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

AESE/AESD/PMULL + EOR.

Definition at line 139 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isLiteralsPair()

bool isLiteralsPair ( const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

◆ shouldScheduleAdjacent()

bool shouldScheduleAdjacent ( const TargetInstrInfo & TII,
const TargetSubtargetInfo & TSI,
const MachineInstr * FirstMI,
const MachineInstr & SecondMI )
static

Check if the instr pair, FirstMI and SecondMI, should be fused together.

Given SecondMI, when FirstMI is unspecified, then check if SecondMI may be part of a fused pair at all.

Definition at line 477 of file AArch64MacroFusion.cpp.

References isAddressLdStPair(), isAddSub2RegAndConstOnePair(), isAdrpAddPair(), isAESPair(), isArithmeticBccPair(), isArithmeticCbzPair(), isArithmeticLogicPair(), isCmpCSelPair(), isCmpCSetPair(), isCryptoEORPair(), isLiteralsPair(), and TII.