LLVM  4.0.0
Classes | Namespaces | Macros | Functions | Variables
X86OptimizeLEAs.cpp File Reference
#include "X86.h"
#include "X86InstrInfo.h"
#include "X86Subtarget.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/LiveVariables.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
Include dependency graph for X86OptimizeLEAs.cpp:

Go to the source code of this file.

Classes

struct  llvm::DenseMapInfo< MemOpKey >
 

Namespaces

 llvm
 Compute iterated dominance frontiers using a linear time algorithm.
 

Macros

#define DEBUG_TYPE   "x86-optimize-LEAs"
 

Functions

 STATISTIC (NumSubstLEAs,"Number of LEA instruction substitutions")
 
 STATISTIC (NumRedundantLEAs,"Number of redundant LEA instructions removed")
 
static bool isIdenticalOp (const MachineOperand &MO1, const MachineOperand &MO2)
 Returns true if two machine operands are identical and they are not physical registers. More...
 
static bool isSimilarDispOp (const MachineOperand &MO1, const MachineOperand &MO2)
 Returns true if two address displacement operands are of the same type and use the same symbol/index/address regardless of the offset. More...
 
static bool isLEA (const MachineInstr &MI)
 Returns true if the instruction is LEA. More...
 
static MemOpKey getMemOpKey (const MachineInstr &MI, unsigned N)
 Returns a hash table key based on memory operands of MI. More...
 
static bool isValidDispOp (const MachineOperand &MO)
 

Variables

static cl::opt< boolDisableX86LEAOpt ("disable-x86-lea-opt", cl::Hidden, cl::desc("X86: Disable LEA optimizations."), cl::init(false))
 

Macro Definition Documentation

#define DEBUG_TYPE   "x86-optimize-LEAs"

Definition at line 37 of file X86OptimizeLEAs.cpp.

Function Documentation

static MemOpKey getMemOpKey ( const MachineInstr MI,
unsigned  N 
)
inlinestatic

Returns a hash table key based on memory operands of MI.

The number of the first memory operand of MI is specified through N.

Definition at line 169 of file X86OptimizeLEAs.cpp.

References llvm::X86::AddrBaseReg, llvm::X86::AddrDisp, llvm::X86::AddrIndexReg, llvm::X86::AddrScaleAmt, llvm::X86::AddrSegmentReg, assert(), llvm::MachineInstr::getOperand(), isLEA(), and llvm::MachineInstr::mayLoadOrStore().

static bool isIdenticalOp ( const MachineOperand MO1,
const MachineOperand MO2 
)
inlinestatic

Returns true if two machine operands are identical and they are not physical registers.

Definition at line 179 of file X86OptimizeLEAs.cpp.

References llvm::MachineOperand::getReg(), llvm::MachineOperand::isIdenticalTo(), llvm::TargetRegisterInfo::isPhysicalRegister(), and llvm::MachineOperand::isReg().

static bool isLEA ( const MachineInstr MI)
inlinestatic

Returns true if the instruction is LEA.

Definition at line 211 of file X86OptimizeLEAs.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by getMemOpKey().

static bool isSimilarDispOp ( const MachineOperand MO1,
const MachineOperand MO2 
)
static
static bool isValidDispOp ( const MachineOperand MO)
static
STATISTIC ( NumSubstLEAs  ,
"Number of LEA instruction substitutions"   
)
STATISTIC ( NumRedundantLEAs  ,
"Number of redundant LEA instructions removed"   
)

Variable Documentation

cl::opt<bool> DisableX86LEAOpt("disable-x86-lea-opt", cl::Hidden, cl::desc("X86: Disable LEA optimizations."), cl::init(false))
static