|
LLVM
4.0.0
|
#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"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< bool > | DisableX86LEAOpt ("disable-x86-lea-opt", cl::Hidden, cl::desc("X86: Disable LEA optimizations."), cl::init(false)) |
| #define DEBUG_TYPE "x86-optimize-LEAs" |
Definition at line 37 of file X86OptimizeLEAs.cpp.
|
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().
|
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().
|
inlinestatic |
Returns true if the instruction is LEA.
Definition at line 211 of file X86OptimizeLEAs.cpp.
References llvm::MachineInstr::getOpcode().
Referenced by getMemOpKey().
|
static |
Returns true if two address displacement operands are of the same type and use the same symbol/index/address regardless of the offset.
Definition at line 193 of file X86OptimizeLEAs.cpp.
References assert(), llvm::MachineOperand::getBlockAddress(), llvm::MachineOperand::getGlobal(), llvm::MachineOperand::getIndex(), llvm::MachineOperand::getMBB(), llvm::MachineOperand::getMCSymbol(), llvm::MachineOperand::getSymbolName(), llvm::MachineOperand::isBlockAddress(), llvm::MachineOperand::isCPI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isJTI(), llvm::MachineOperand::isMBB(), llvm::MachineOperand::isMCSymbol(), llvm::MachineOperand::isSymbol(), and isValidDispOp().
|
static |
Definition at line 187 of file X86OptimizeLEAs.cpp.
References llvm::MachineOperand::isBlockAddress(), llvm::MachineOperand::isCPI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isJTI(), llvm::MachineOperand::isMBB(), llvm::MachineOperand::isMCSymbol(), and llvm::MachineOperand::isSymbol().
Referenced by isSimilarDispOp().
| STATISTIC | ( | NumSubstLEAs | , |
| "Number of LEA instruction substitutions" | |||
| ) |
| STATISTIC | ( | NumRedundantLEAs | , |
| "Number of redundant LEA instructions removed" | |||
| ) |
1.8.6