LLVM  14.0.0git
Macros | Functions | Variables
PPCInstrInfo.cpp File Reference
#include "PPCInstrInfo.h"
#include "MCTargetDesc/PPCPredicates.h"
#include "PPC.h"
#include "PPCHazardRecognizers.h"
#include "PPCInstrBuilder.h"
#include "PPCMachineFunctionInfo.h"
#include "PPCTargetMachine.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/CodeGen/LiveIntervals.h"
#include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/PseudoSourceValue.h"
#include "llvm/CodeGen/RegisterClassInfo.h"
#include "llvm/CodeGen/RegisterPressure.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/CodeGen/SlotIndexes.h"
#include "llvm/CodeGen/StackMaps.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCInst.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "PPCGenInstrInfo.inc"
Include dependency graph for PPCInstrInfo.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "ppc-instr-info"
 
#define GET_INSTRMAP_INFO
 
#define GET_INSTRINFO_CTOR_DTOR
 
#define InfoArrayIdxFMAInst   0
 
#define InfoArrayIdxFAddInst   1
 
#define InfoArrayIdxFMULInst   2
 
#define InfoArrayIdxAddOpIdx   3
 
#define InfoArrayIdxMULOpIdx   4
 
#define InfoArrayIdxFSubInst   5
 

Functions

 STATISTIC (NumStoreSPILLVSRRCAsVec, "Number of spillvsrrc spilled to stack as vec")
 
 STATISTIC (NumStoreSPILLVSRRCAsGpr, "Number of spillvsrrc spilled to stack as gpr")
 
 STATISTIC (NumGPRtoVSRSpill, "Number of gpr spills to spillvsrrc")
 
 STATISTIC (CmpIselsConverted, "Number of ISELs that depend on comparison of constants converted")
 
 STATISTIC (MissedConvertibleImmediateInstrs, "Number of compare-immediate instructions fed by constants")
 
 STATISTIC (NumRcRotatesConvertedToRcAnd, "Number of record-form rotates converted to record-form andi")
 
static unsigned getCRBitValue (unsigned CRBit)
 
static bool MBBDefinesCTR (MachineBasicBlock &MBB)
 
static bool isLdStSafeToCluster (const MachineInstr &LdSt, const TargetRegisterInfo *TRI)
 
static bool isClusterableLdStOpcPair (unsigned FirstOpc, unsigned SecondOpc, const PPCSubtarget &Subtarget)
 
static bool isAnImmediateOperand (const MachineOperand &MO)
 
static unsigned selectReg (int64_t Imm1, int64_t Imm2, unsigned CompareOpc, unsigned TrueReg, unsigned FalseReg, unsigned CRSubReg)
 
static void swapMIOperands (MachineInstr &MI, unsigned Op1, unsigned Op2)
 
static bool isSignExtendingOp (const MachineInstr &MI)
 
static bool isZeroExtendingOp (const MachineInstr &MI)
 

Variables

static cl::opt< bool > DisableCTRLoopAnal ("disable-ppc-ctrloop-analysis", cl::Hidden, cl::desc("Disable analysis for CTR loops"))
 
static cl::opt< bool > DisableCmpOpt ("disable-ppc-cmp-opt", cl::desc("Disable compare instruction optimization"), cl::Hidden)
 
static cl::opt< bool > VSXSelfCopyCrash ("crash-on-ppc-vsx-self-copy", cl::desc("Causes the backend to crash instead of generating a nop VSX copy"), cl::Hidden)
 
static cl::opt< bool > UseOldLatencyCalc ("ppc-old-latency-calc", cl::Hidden, cl::desc("Use the old (incorrect) instruction latency calculation"))
 
static cl::opt< float > FMARPFactor ("ppc-fma-rp-factor", cl::Hidden, cl::init(1.5), cl::desc("register pressure factor for the transformations."))
 
static cl::opt< bool > EnableFMARegPressureReduction ("ppc-fma-rp-reduction", cl::Hidden, cl::init(true), cl::desc("enable register pressure reduce in machine combiner pass."))
 
static const uint16_t FMAOpIdxInfo [][6]
 
const unsigned MAX_DEPTH = 1
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "ppc-instr-info"

Definition at line 46 of file PPCInstrInfo.cpp.

◆ GET_INSTRINFO_CTOR_DTOR

#define GET_INSTRINFO_CTOR_DTOR

Definition at line 49 of file PPCInstrInfo.cpp.

◆ GET_INSTRMAP_INFO

#define GET_INSTRMAP_INFO

Definition at line 48 of file PPCInstrInfo.cpp.

◆ InfoArrayIdxAddOpIdx

#define InfoArrayIdxAddOpIdx   3

Definition at line 290 of file PPCInstrInfo.cpp.

◆ InfoArrayIdxFAddInst

#define InfoArrayIdxFAddInst   1

Definition at line 288 of file PPCInstrInfo.cpp.

◆ InfoArrayIdxFMAInst

#define InfoArrayIdxFMAInst   0

Definition at line 287 of file PPCInstrInfo.cpp.

◆ InfoArrayIdxFMULInst

#define InfoArrayIdxFMULInst   2

Definition at line 289 of file PPCInstrInfo.cpp.

◆ InfoArrayIdxFSubInst

#define InfoArrayIdxFSubInst   5

Definition at line 292 of file PPCInstrInfo.cpp.

◆ InfoArrayIdxMULOpIdx

#define InfoArrayIdxMULOpIdx   4

Definition at line 291 of file PPCInstrInfo.cpp.

Function Documentation

◆ getCRBitValue()

static unsigned getCRBitValue ( unsigned  CRBit)
static

Definition at line 1661 of file PPCInstrInfo.cpp.

References assert(), and llvm::MipsISD::Ret.

Referenced by llvm::PPCInstrInfo::copyPhysReg().

◆ isAnImmediateOperand()

static bool isAnImmediateOperand ( const MachineOperand MO)
static

◆ isClusterableLdStOpcPair()

static bool isClusterableLdStOpcPair ( unsigned  FirstOpc,
unsigned  SecondOpc,
const PPCSubtarget Subtarget 
)
static

Definition at line 2797 of file PPCInstrInfo.cpp.

Referenced by llvm::PPCInstrInfo::shouldClusterMemOps().

◆ isLdStSafeToCluster()

static bool isLdStSafeToCluster ( const MachineInstr LdSt,
const TargetRegisterInfo TRI 
)
static

◆ isSignExtendingOp()

static bool isSignExtendingOp ( const MachineInstr MI)
static

Definition at line 5094 of file PPCInstrInfo.cpp.

References MI, and llvm::RISCVISD::SRAW.

Referenced by llvm::PPCInstrInfo::isSignOrZeroExtended().

◆ isZeroExtendingOp()

static bool isZeroExtendingOp ( const MachineInstr MI)
static

Definition at line 5129 of file PPCInstrInfo.cpp.

References MI.

Referenced by llvm::PPCInstrInfo::isSignOrZeroExtended().

◆ MBBDefinesCTR()

static bool MBBDefinesCTR ( MachineBasicBlock MBB)
static

Definition at line 2140 of file PPCInstrInfo.cpp.

References MBB, and MI.

Referenced by llvm::PPCInstrInfo::isProfitableToIfCvt().

◆ selectReg()

static unsigned selectReg ( int64_t  Imm1,
int64_t  Imm2,
unsigned  CompareOpc,
unsigned  TrueReg,
unsigned  FalseReg,
unsigned  CRSubReg 
)
static

Definition at line 3137 of file PPCInstrInfo.cpp.

References llvm_unreachable.

◆ STATISTIC() [1/6]

STATISTIC ( CmpIselsConverted  ,
"Number of ISELs that depend on comparison of constants converted"   
)

◆ STATISTIC() [2/6]

STATISTIC ( MissedConvertibleImmediateInstrs  ,
"Number of compare-immediate instructions fed by constants"   
)

◆ STATISTIC() [3/6]

STATISTIC ( NumGPRtoVSRSpill  ,
"Number of gpr spills to spillvsrrc"   
)

◆ STATISTIC() [4/6]

STATISTIC ( NumRcRotatesConvertedToRcAnd  ,
"Number of record-form rotates converted to record-form andi"   
)

◆ STATISTIC() [5/6]

STATISTIC ( NumStoreSPILLVSRRCAsGpr  ,
"Number of spillvsrrc spilled to stack as gpr"   
)

◆ STATISTIC() [6/6]

STATISTIC ( NumStoreSPILLVSRRCAsVec  ,
"Number of spillvsrrc spilled to stack as vec"   
)

◆ swapMIOperands()

static void swapMIOperands ( MachineInstr MI,
unsigned  Op1,
unsigned  Op2 
)
static

Definition at line 4279 of file PPCInstrInfo.cpp.

References assert(), i, llvm::max(), MI, and llvm::min().

Variable Documentation

◆ DisableCmpOpt

cl::opt<bool> DisableCmpOpt("disable-ppc-cmp-opt", cl::desc("Disable compare instruction optimization"), cl::Hidden)
static

◆ DisableCTRLoopAnal

cl:: opt<bool> DisableCTRLoopAnal("disable-ppc-ctrloop-analysis", cl::Hidden, cl::desc("Disable analysis for CTR loops"))
static

◆ EnableFMARegPressureReduction

cl::opt<bool> EnableFMARegPressureReduction("ppc-fma-rp-reduction", cl::Hidden, cl::init(true), cl::desc("enable register pressure reduce in machine combiner pass."))
static

◆ FMAOpIdxInfo

const uint16_t FMAOpIdxInfo[][6]
static
Initial value:
= {
{PPC::XSMADDADP, PPC::XSADDDP, PPC::XSMULDP, 1, 2, PPC::XSSUBDP},
{PPC::XSMADDASP, PPC::XSADDSP, PPC::XSMULSP, 1, 2, PPC::XSSUBSP},
{PPC::XVMADDADP, PPC::XVADDDP, PPC::XVMULDP, 1, 2, PPC::XVSUBDP},
{PPC::XVMADDASP, PPC::XVADDSP, PPC::XVMULSP, 1, 2, PPC::XVSUBSP},
{PPC::FMADD, PPC::FADD, PPC::FMUL, 3, 1, PPC::FSUB},
{PPC::FMADDS, PPC::FADDS, PPC::FMULS, 3, 1, PPC::FSUBS}}

Definition at line 301 of file PPCInstrInfo.cpp.

Referenced by llvm::PPCInstrInfo::finalizeInsInstrs(), and llvm::PPCInstrInfo::getFMAPatterns().

◆ FMARPFactor

cl::opt<float> FMARPFactor("ppc-fma-rp-factor", cl::Hidden, cl::init(1.5), cl::desc("register pressure factor for the transformations."))
static

◆ MAX_DEPTH

const unsigned MAX_DEPTH = 1

Definition at line 5205 of file PPCInstrInfo.cpp.

Referenced by llvm::PPCInstrInfo::isSignOrZeroExtended().

◆ UseOldLatencyCalc

cl::opt<bool> UseOldLatencyCalc("ppc-old-latency-calc", cl::Hidden, cl::desc("Use the old (incorrect) instruction latency calculation"))
static

◆ VSXSelfCopyCrash

cl::opt<bool> VSXSelfCopyCrash("crash-on-ppc-vsx-self-copy", cl::desc("Causes the backend to crash instead of generating a nop VSX copy"), cl::Hidden)
static
llvm::ISD::FADD
@ FADD
Simple binary floating point operators.
Definition: ISDOpcodes.h:377
llvm::X86ISD::FMULS
@ FMULS
Definition: X86ISelLowering.h:223
llvm::X86ISD::FADDS
@ FADDS
Definition: X86ISelLowering.h:217
llvm::ISD::FMUL
@ FMUL
Definition: ISDOpcodes.h:379
llvm::X86ISD::FSUBS
@ FSUBS
Definition: X86ISelLowering.h:220
llvm::ISD::FSUB
@ FSUB
Definition: ISDOpcodes.h:378