|
LLVM 24.0.0git
|
#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/Analysis/ProfileSummaryInfo.h"#include "llvm/CodeGen/LazyMachineBlockFrequencyInfo.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/CodeGen/MachineSizeOpts.h"#include "llvm/CodeGen/RegisterClassInfo.h"#include "llvm/CodeGen/TargetOpcodes.h"#include "llvm/CodeGen/TargetRegisterInfo.h"#include "llvm/IR/DebugInfoMetadata.h"#include "llvm/IR/DebugLoc.h"#include "llvm/IR/Function.h"#include "llvm/MC/MCInstrDesc.h"#include "llvm/Support/Debug.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/raw_ostream.h"#include <cassert>#include <cstdint>#include <iterator>Go to the source code of this file.
Classes | |
| struct | llvm::DenseMapInfo< MemOpKey > |
| Provide DenseMapInfo for MemOpKey. More... | |
Namespaces | |
| namespace | llvm |
| This is an optimization pass for GlobalISel generic memory operations. | |
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. | |
| 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. | |
| static bool | isLEA (const MachineInstr &MI) |
| Returns true if the instruction is LEA. | |
| static MemOpKey | getMemOpKey (const MachineInstr &MI, unsigned N) |
Returns a hash table key based on memory operands of MI. | |
| static bool | isValidDispOp (const MachineOperand &MO) |
| INITIALIZE_PASS (X86OptimizeLEAsLegacy, DEBUG_TYPE, "X86 optimize LEA pass", false, false) int X86OptimizeLEAsImpl | |
| #define DEBUG_TYPE "x86-optimize-leas" |
Definition at line 55 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 162 of file X86OptimizeLEAs.cpp.
References llvm::X86::AddrBaseReg, llvm::X86::AddrDisp, llvm::X86::AddrIndexReg, llvm::X86::AddrScaleAmt, llvm::X86::AddrSegmentReg, assert(), isLEA(), MI, and N.
| INITIALIZE_PASS | ( | X86OptimizeLEAsLegacy | , |
| DEBUG_TYPE | , | ||
| "X86 optimize LEA pass" | , | ||
| false | , | ||
| false | ) |
Definition at line 295 of file X86OptimizeLEAs.cpp.
References assert(), const, DEBUG_TYPE, llvm::First, and llvm::Last.
|
inlinestatic |
Returns true if two machine operands are identical and they are not physical registers.
Definition at line 172 of file X86OptimizeLEAs.cpp.
References llvm::MachineOperand::getReg(), llvm::MachineOperand::isIdenticalTo(), llvm::Register::isPhysical(), and llvm::MachineOperand::isReg().
|
inlinestatic |
Returns true if the instruction is LEA.
Definition at line 202 of file X86OptimizeLEAs.cpp.
References MI.
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 184 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 178 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 | ( | NumRedundantLEAs | , |
| "Number of redundant LEA instructions removed" | ) |
References llvm::sampleprof::Base, MI, and Operands.
| STATISTIC | ( | NumSubstLEAs | , |
| "Number of LEA instruction substitutions" | ) |