LLVM API Documentation

IfConversion.cpp File Reference

#include "llvm/Function.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetLowering.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/STLExtras.h"

Include dependency graph for IfConversion.cpp:

Go to the source code of this file.

Defines

#define DEBUG_TYPE   "ifcvt"

Functions

 STATISTIC (NumSimple,"Number of simple if-conversions performed")
 STATISTIC (NumSimpleFalse,"Number of simple (F) if-conversions performed")
 STATISTIC (NumTriangle,"Number of triangle if-conversions performed")
 STATISTIC (NumTriangleRev,"Number of triangle (R) if-conversions performed")
 STATISTIC (NumTriangleFalse,"Number of triangle (F) if-conversions performed")
 STATISTIC (NumTriangleFRev,"Number of triangle (F/R) if-conversions performed")
 STATISTIC (NumDiamonds,"Number of diamond if-conversions performed")
 STATISTIC (NumIfConvBBs,"Number of if-converted blocks")
 STATISTIC (NumDupBBs,"Number of duplicated blocks")
FunctionPass * llvm::createIfConverterPass ()
 IfConverter Pass - This pass performs machine code if conversion.
static MachineBasicBlock * findFalseBlock (MachineBasicBlock *BB, MachineBasicBlock *TrueBB)
static MachineBasicBlock * getNextBlock (MachineBasicBlock *BB)
static MachineBasicBlock::iterator firstNonBranchInst (MachineBasicBlock *BB, const TargetInstrInfo *TII)
static bool canFallThroughTo (MachineBasicBlock *BB, MachineBasicBlock *ToBB)
static void InsertUncondBranch (MachineBasicBlock *BB, MachineBasicBlock *ToBB, const TargetInstrInfo *TII)

Variables

static cl::opt< int > IfCvtFnStart ("ifcvt-fn-start", cl::init(-1), cl::Hidden)
static cl::opt< int > IfCvtFnStop ("ifcvt-fn-stop", cl::init(-1), cl::Hidden)
static cl::opt< int > IfCvtLimit ("ifcvt-limit", cl::init(-1), cl::Hidden)
static cl::opt< bool > DisableSimple ("disable-ifcvt-simple", cl::init(false), cl::Hidden)
static cl::opt< bool > DisableSimpleF ("disable-ifcvt-simple-false", cl::init(false), cl::Hidden)
static cl::opt< bool > DisableTriangle ("disable-ifcvt-triangle", cl::init(false), cl::Hidden)
static cl::opt< bool > DisableTriangleR ("disable-ifcvt-triangle-rev", cl::init(false), cl::Hidden)
static cl::opt< bool > DisableTriangleF ("disable-ifcvt-triangle-false", cl::init(false), cl::Hidden)
static cl::opt< bool > DisableTriangleFR ("disable-ifcvt-triangle-false-rev", cl::init(false), cl::Hidden)
static cl::opt< bool > DisableDiamond ("disable-ifcvt-diamond", cl::init(false), cl::Hidden)
static RegisterPass< IfConverter > X ("if-converter","If Converter")


Define Documentation

#define DEBUG_TYPE   "ifcvt"

Definition at line 14 of file IfConversion.cpp.


Function Documentation

static bool canFallThroughTo ( MachineBasicBlock *  BB,
MachineBasicBlock *  ToBB 
) [static]

canFallThroughTo - Returns true either if ToBB is the next block after BB or that all the intervening blocks are empty (given BB can fall through to its next block).

Definition at line 794 of file IfConversion.cpp.

References E, llvm::MachineFunction::end(), and llvm::MachineBasicBlock::getParent().

static MachineBasicBlock* findFalseBlock ( MachineBasicBlock *  BB,
MachineBasicBlock *  TrueBB 
) [static]

findFalseBlock - BB has a fallthrough. Find its 'false' successor given its 'true' successor.

Definition at line 366 of file IfConversion.cpp.

References E, llvm::MachineBasicBlock::succ_begin(), and llvm::MachineBasicBlock::succ_end().

static MachineBasicBlock::iterator firstNonBranchInst ( MachineBasicBlock *  BB,
const TargetInstrInfo *  TII 
) [static]

static MachineBasicBlock* getNextBlock ( MachineBasicBlock *  BB  )  [inline, static]

getNextBlock - Returns the next block in the function blocks ordering. If it is the end, returns NULL.

Definition at line 391 of file IfConversion.cpp.

References E, llvm::MachineFunction::end(), and llvm::MachineBasicBlock::getParent().

static void InsertUncondBranch ( MachineBasicBlock *  BB,
MachineBasicBlock *  ToBB,
const TargetInstrInfo *  TII 
) [static]

InsertUncondBranch - Inserts an unconditional branch from BB to ToBB.

Definition at line 820 of file IfConversion.cpp.

References llvm::TargetInstrInfo::InsertBranch().

STATISTIC ( NumDupBBs  ,
"Number of duplicated blocks"   
)

STATISTIC ( NumIfConvBBs  ,
"Number of if-converted blocks"   
)

STATISTIC ( NumDiamonds  ,
"Number of diamond if-conversions performed"   
)

STATISTIC ( NumTriangleFRev  ,
"Number of triangle (F/R) if-conversions performed"   
)

STATISTIC ( NumTriangleFalse  ,
"Number of triangle (F) if-conversions performed"   
)

STATISTIC ( NumTriangleRev  ,
"Number of triangle (R) if-conversions performed"   
)

STATISTIC ( NumTriangle  ,
"Number of triangle if-conversions performed"   
)

STATISTIC ( NumSimpleFalse  ,
"Number of simple (F) if-conversions performed"   
)

STATISTIC ( NumSimple  ,
"Number of simple if-conversions performed"   
)


Variable Documentation

std::vector<BBInfo> BBAnalysis

BBAnalysis - Results of if-conversion feasibility analysis indexed by basic block number.

Definition at line 142 of file IfConversion.cpp.

BBInfo& BBI

Definition at line 100 of file IfConversion.cpp.

Definition at line 101 of file IfConversion.cpp.

cl::opt<bool> DisableDiamond("disable-ifcvt-diamond", cl::init(false), cl::Hidden) [static]

cl::opt<bool> DisableSimple("disable-ifcvt-simple", cl::init(false), cl::Hidden) [static]

cl::opt<bool> DisableSimpleF("disable-ifcvt-simple-false", cl::init(false), cl::Hidden) [static]

cl::opt<bool> DisableTriangle("disable-ifcvt-triangle", cl::init(false), cl::Hidden) [static]

cl::opt<bool> DisableTriangleF("disable-ifcvt-triangle-false", cl::init(false), cl::Hidden) [static]

cl::opt<bool> DisableTriangleFR("disable-ifcvt-triangle-false-rev", cl::init(false), cl::Hidden) [static]

cl::opt<bool> DisableTriangleR("disable-ifcvt-triangle-rev", cl::init(false), cl::Hidden) [static]

Definition at line 105 of file IfConversion.cpp.

Definition at line 98 of file IfConversion.cpp.

char ID [static]

Definition at line 148 of file IfConversion.cpp.

cl::opt<int> IfCvtFnStart("ifcvt-fn-start", cl::init(-1), cl::Hidden) [static]

cl::opt<int> IfCvtFnStop("ifcvt-fn-stop", cl::init(-1), cl::Hidden) [static]

cl::opt<int> IfCvtLimit("ifcvt-limit", cl::init(-1), cl::Hidden) [static]

bool IsAnalyzed

Definition at line 95 of file IfConversion.cpp.

Definition at line 94 of file IfConversion.cpp.

Definition at line 97 of file IfConversion.cpp.

bool IsDone

Definition at line 93 of file IfConversion.cpp.

bool IsEnqueued

Definition at line 96 of file IfConversion.cpp.

Definition at line 99 of file IfConversion.cpp.

IfcvtKind Kind

bool MadeChange

Definition at line 146 of file IfConversion.cpp.

Definition at line 129 of file IfConversion.cpp.

Definition at line 102 of file IfConversion.cpp.

Definition at line 130 of file IfConversion.cpp.

Definition at line 131 of file IfConversion.cpp.

std::vector<MachineBasicBlock*> Roots

Roots - Basic blocks that do not have successors. These are the starting points of Graph traversal.

Definition at line 138 of file IfConversion.cpp.

Definition at line 145 of file IfConversion.cpp.

Definition at line 104 of file IfConversion.cpp.

RegisterPass<IfConverter> X("if-converter","If Converter") [static]