LLVM 20.0.0git
Functions
AArch64MacroFusion.cpp File Reference
#include "AArch64MacroFusion.h"
#include "AArch64Subtarget.h"
#include "llvm/CodeGen/MacroFusion.h"
#include "llvm/CodeGen/TargetInstrInfo.h"

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 isCCSelectPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI)
 Compare and conditional select.
 
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()

static 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()

static bool isAddSub2RegAndConstOnePair ( const MachineInstr FirstMI,
const MachineInstr SecondMI 
)
static

◆ isAdrpAddPair()

static 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()

static 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()

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

◆ isArithmeticCbzPair()

static 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()

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

Definition at line 283 of file AArch64MacroFusion.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by shouldScheduleAdjacent().

◆ isCCSelectPair()

static bool isCCSelectPair ( 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().

◆ isCryptoEORPair()

static 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()

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

◆ shouldScheduleAdjacent()

static 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 443 of file AArch64MacroFusion.cpp.

References isAddressLdStPair(), isAddSub2RegAndConstOnePair(), isAdrpAddPair(), isAESPair(), isArithmeticBccPair(), isArithmeticCbzPair(), isArithmeticLogicPair(), isCCSelectPair(), isCryptoEORPair(), and isLiteralsPair().

Referenced by llvm::createAArch64MacroFusionDAGMutation().