|
LLVM 23.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/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/CommandLine.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 | |
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 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 181 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 313 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 191 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 221 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 203 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 197 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, and MI.
| STATISTIC | ( | NumSubstLEAs | , |
| "Number of LEA instruction substitutions" | ) |