LLVM 20.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 (X86OptimizeLEAPass, DEBUG_TYPE, "X86 optimize LEA pass", false, false) int X86OptimizeLEAPass | |
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 191 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 | ( | X86OptimizeLEAPass | , |
DEBUG_TYPE | , | ||
"X86 optimize LEA pass" | , | ||
false | , | ||
false | |||
) |
Definition at line 315 of file X86OptimizeLEAs.cpp.
References assert(), llvm::First, and llvm::Last.
|
inlinestatic |
Returns true if two machine operands are identical and they are not physical registers.
Definition at line 201 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 231 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 213 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 207 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 Operands.
STATISTIC | ( | NumSubstLEAs | , |
"Number of LEA instruction substitutions" | |||
) |