LLVM  8.0.1
Macros | Functions | Variables
AArch64ConditionalCompares.cpp File Reference
#include "AArch64.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/MachineTraceMetrics.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
Include dependency graph for AArch64ConditionalCompares.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "aarch64-ccmp"
 

Functions

 STATISTIC (NumConsidered, "Number of ccmps considered")
 
 STATISTIC (NumPhiRejs, "Number of ccmps rejected (PHI)")
 
 STATISTIC (NumPhysRejs, "Number of ccmps rejected (Physregs)")
 
 STATISTIC (NumPhi2Rejs, "Number of ccmps rejected (PHI2)")
 
 STATISTIC (NumHeadBranchRejs, "Number of ccmps rejected (Head branch)")
 
 STATISTIC (NumCmpBranchRejs, "Number of ccmps rejected (CmpBB branch)")
 
 STATISTIC (NumCmpTermRejs, "Number of ccmps rejected (CmpBB is cbz...)")
 
 STATISTIC (NumImmRangeRejs, "Number of ccmps rejected (Imm out of range)")
 
 STATISTIC (NumLiveDstRejs, "Number of ccmps rejected (Cmp dest live)")
 
 STATISTIC (NumMultNZCVUses, "Number of ccmps rejected (NZCV used)")
 
 STATISTIC (NumUnknNZCVDefs, "Number of ccmps rejected (NZCV def unknown)")
 
 STATISTIC (NumSpeculateRejs, "Number of ccmps rejected (Can't speculate)")
 
 STATISTIC (NumConverted, "Number of ccmp instructions created")
 
 STATISTIC (NumCompBranches, "Number of cbz/cbnz branches converted")
 
static bool parseCond (ArrayRef< MachineOperand > Cond, AArch64CC::CondCode &CC)
 
 INITIALIZE_PASS_BEGIN (AArch64ConditionalCompares, "aarch64-ccmp", "AArch64 CCMP Pass", false, false) INITIALIZE_PASS_END(AArch64ConditionalCompares
 

Variables

static cl::opt< unsignedBlockInstrLimit ("aarch64-ccmp-limit", cl::init(30), cl::Hidden, cl::desc("Maximum number of instructions per speculated block."))
 
static cl::opt< boolStress ("aarch64-stress-ccmp", cl::Hidden, cl::desc("Turn all knobs to 11"))
 
aarch64 ccmp
 
aarch64 AArch64 CCMP Pass
 
aarch64 AArch64 CCMP false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "aarch64-ccmp"

Definition at line 43 of file AArch64ConditionalCompares.cpp.

Function Documentation

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( AArch64ConditionalCompares  ,
"aarch64-ccmp ,
"AArch64 CCMP Pass ,
false  ,
false   
)

Referenced by parseCond().

◆ parseCond()

static bool parseCond ( ArrayRef< MachineOperand Cond,
AArch64CC::CondCode CC 
)
static

Definition at line 273 of file AArch64ConditionalCompares.cpp.

References llvm::ARM_AM::add, llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addImm(), llvm::TargetInstrInfo::analyzeBranch(), llvm::MachineOperandIteratorBase::analyzePhysReg(), assert(), B, llvm::MachineBasicBlock::begin(), BlockInstrLimit, llvm::BuildMI(), llvm::SmallVectorImpl< T >::clear(), llvm::MachineRegisterInfo::constrainRegClass(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::dbgs(), llvm::RegState::Dead, llvm::RegState::Define, E, llvm::SmallVectorBase::empty(), llvm::MachineBasicBlock::empty(), llvm::MachineBasicBlock::end(), llvm::AArch64CC::EQ, llvm::MachineBasicBlock::eraseFromParent(), llvm::MachineInstr::eraseFromParent(), llvm::MachineBasicBlock::front(), llvm::MCInstrInfo::get(), llvm::AArch64CC::getCondCodeName(), llvm::MachineInstr::getDebugLoc(), llvm::MachineBranchProbabilityInfo::getEdgeProbability(), llvm::MachineBasicBlock::getFirstTerminator(), llvm::AArch64CC::getInvertedCondCode(), llvm::AArch64CC::getNZCVToSatisfyCondCode(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::PassRegistry::getPassRegistry(), llvm::MachineOperand::getReg(), getReg(), llvm::TargetInstrInfo::getRegClass(), llvm::MachineBasicBlock::hasSuccessorProbabilities(), I, INITIALIZE_PASS_BEGIN(), INITIALIZE_PASS_DEPENDENCY, llvm::initializeAArch64ConditionalComparesPass(), InstrCount, llvm::MachineInstr::isPHI(), llvm::MachineOperand::isReg(), llvm::MachineBasicBlock::isSuccessor(), llvm::MachineBasicBlock::livein_empty(), LLVM_DEBUG, LLVM_FALLTHROUGH, llvm_unreachable, Loops, llvm::make_range(), MRI, llvm::AArch64CC::NE, llvm::MachineBasicBlock::pred_size(), llvm::printMBBReference(), llvm::SmallVectorTemplateBase< T >::push_back(), llvm::TargetInstrInfo::removeBranch(), llvm::MachineBasicBlock::removeSuccessor(), llvm::MachineBasicBlock::setSuccProbability(), shouldConvert(), llvm::ArrayRef< T >::size(), llvm::MachineBasicBlock::splice(), Stress, llvm::MachineBasicBlock::succ_begin(), llvm::MachineBasicBlock::succ_end(), llvm::MachineBasicBlock::succ_size(), std::swap(), TII, llvm::MachineBasicBlock::transferSuccessorsAndUpdatePHIs(), TRI, and llvm::MachineBasicBlock::updateTerminator().

◆ STATISTIC() [1/14]

STATISTIC ( NumConsidered  ,
"Number of ccmps considered"   
)

◆ STATISTIC() [2/14]

STATISTIC ( NumPhiRejs  ,
"Number of ccmps rejected (PHI)"   
)

◆ STATISTIC() [3/14]

STATISTIC ( NumPhysRejs  ,
"Number of ccmps rejected (Physregs)"   
)

◆ STATISTIC() [4/14]

STATISTIC ( NumPhi2Rejs  ,
"Number of ccmps rejected (PHI2)"   
)

◆ STATISTIC() [5/14]

STATISTIC ( NumHeadBranchRejs  ,
"Number of ccmps rejected (Head branch)"   
)

◆ STATISTIC() [6/14]

STATISTIC ( NumCmpBranchRejs  ,
"Number of ccmps rejected (CmpBB branch)"   
)

◆ STATISTIC() [7/14]

STATISTIC ( NumCmpTermRejs  ,
"Number of ccmps rejected (CmpBB is cbz...)"   
)

◆ STATISTIC() [8/14]

STATISTIC ( NumImmRangeRejs  ,
"Number of ccmps rejected (Imm out of range)"   
)

◆ STATISTIC() [9/14]

STATISTIC ( NumLiveDstRejs  ,
"Number of ccmps rejected (Cmp dest live)"   
)

◆ STATISTIC() [10/14]

STATISTIC ( NumMultNZCVUses  ,
"Number of ccmps rejected (NZCV used)"   
)

◆ STATISTIC() [11/14]

STATISTIC ( NumUnknNZCVDefs  ,
"Number of ccmps rejected (NZCV def unknown)"   
)

◆ STATISTIC() [12/14]

STATISTIC ( NumSpeculateRejs  ,
"Number of ccmps rejected (Can't speculate)"   
)

◆ STATISTIC() [13/14]

STATISTIC ( NumConverted  ,
"Number of ccmp instructions created"   
)

◆ STATISTIC() [14/14]

STATISTIC ( NumCompBranches  ,
"Number of cbz/cbnz branches converted"   
)

Variable Documentation

◆ BlockInstrLimit

cl::opt<unsigned> BlockInstrLimit("aarch64-ccmp-limit", cl::init(30), cl::Hidden, cl::desc("Maximum number of instructions per speculated block."))
static

Referenced by parseCond().

◆ ccmp

aarch64 ccmp

Definition at line 803 of file AArch64ConditionalCompares.cpp.

◆ false

aarch64 AArch64 CCMP false

Definition at line 803 of file AArch64ConditionalCompares.cpp.

◆ Pass

aarch64 AArch64 CCMP Pass

Definition at line 803 of file AArch64ConditionalCompares.cpp.

◆ Stress

cl::opt<bool> Stress("aarch64-stress-ccmp", cl::Hidden, cl::desc("Turn all knobs to 11"))
static

Referenced by parseCond().