LLVM  6.0.0svn
Classes | Namespaces | Macros | Functions | Variables
X86OptimizeLEAs.cpp File Reference
#include "MCTargetDesc/X86BaseInfo.h"
#include "X86.h"
#include "X86InstrInfo.h"
#include "X86Subtarget.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Function.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetOpcodes.h"
#include "llvm/Target/TargetRegisterInfo.h"
#include <cassert>
#include <cstdint>
#include <iterator>
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

◆ DEBUG_TYPE

#define DEBUG_TYPE   "x86-optimize-LEAs"

Definition at line 53 of file X86OptimizeLEAs.cpp.

Function Documentation

◆ getMemOpKey()

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 189 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().

Referenced by llvm::createX86OptimizeLEAs().

◆ isIdenticalOp()

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 199 of file X86OptimizeLEAs.cpp.

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

Referenced by llvm::createX86OptimizeLEAs().

◆ isLEA()

static bool isLEA ( const MachineInstr MI)
inlinestatic

Returns true if the instruction is LEA.

Definition at line 231 of file X86OptimizeLEAs.cpp.

References llvm::MachineInstr::getOpcode(), List, MI, MRI, and TII.

Referenced by llvm::createX86OptimizeLEAs(), and getMemOpKey().

◆ isSimilarDispOp()

static bool isSimilarDispOp ( const MachineOperand MO1,
const MachineOperand MO2 
)
static

◆ isValidDispOp()

static bool isValidDispOp ( const MachineOperand MO)
static

◆ STATISTIC() [1/2]

STATISTIC ( NumSubstLEAs  ,
"Number of LEA instruction substitutions"   
)

◆ STATISTIC() [2/2]

STATISTIC ( NumRedundantLEAs  ,
"Number of redundant LEA instructions removed"   
)

Variable Documentation

◆ DisableX86LEAOpt

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