|
LLVM 22.0.0git
|
#include "llvm/CodeGen/MachineLICM.h"#include "llvm/ADT/BitVector.h"#include "llvm/ADT/DenseMap.h"#include "llvm/ADT/STLExtras.h"#include "llvm/ADT/SmallVector.h"#include "llvm/ADT/Statistic.h"#include "llvm/Analysis/AliasAnalysis.h"#include "llvm/CodeGen/MachineBasicBlock.h"#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"#include "llvm/CodeGen/MachineDomTreeUpdater.h"#include "llvm/CodeGen/MachineDominators.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineFunction.h"#include "llvm/CodeGen/MachineFunctionPass.h"#include "llvm/CodeGen/MachineInstr.h"#include "llvm/CodeGen/MachineLoopInfo.h"#include "llvm/CodeGen/MachineMemOperand.h"#include "llvm/CodeGen/MachineOperand.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/CodeGen/PseudoSourceValue.h"#include "llvm/CodeGen/TargetInstrInfo.h"#include "llvm/CodeGen/TargetLowering.h"#include "llvm/CodeGen/TargetRegisterInfo.h"#include "llvm/CodeGen/TargetSchedule.h"#include "llvm/CodeGen/TargetSubtargetInfo.h"#include "llvm/IR/DebugLoc.h"#include "llvm/InitializePasses.h"#include "llvm/MC/MCInstrDesc.h"#include "llvm/MC/MCRegister.h"#include "llvm/Pass.h"#include "llvm/Support/Casting.h"#include "llvm/Support/CommandLine.h"#include "llvm/Support/Debug.h"#include "llvm/Support/raw_ostream.h"#include <cassert>#include <limits>#include <vector>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "machinelicm" |
| #define | GET_RESULT(RESULT, GETTER, INFIX) |
Enumerations | |
| enum class | UseBFI { None , PGO , All } |
Functions | |
| STATISTIC (NumHoisted, "Number of machine instructions hoisted out of loops") | |
| STATISTIC (NumLowRP, "Number of instructions hoisted in low reg pressure situation") | |
| STATISTIC (NumHighLatency, "Number of high latency instructions hoisted") | |
| STATISTIC (NumCSEed, "Number of hoisted machine instructions CSEed") | |
| STATISTIC (NumPostRAHoisted, "Number of machine instructions hoisted out of loops post regalloc") | |
| STATISTIC (NumStoreConst, "Number of stores of const phys reg hoisted out of loops") | |
| STATISTIC (NumNotHoistedDueToHotness, "Number of instructions not hoisted due to block frequency") | |
| INITIALIZE_PASS_BEGIN (MachineLICM, DEBUG_TYPE, "Machine Loop Invariant Code Motion", false, false) INITIALIZE_PASS_END(MachineLICM | |
| Machine Loop Invariant Code false | INITIALIZE_PASS_BEGIN (EarlyMachineLICM, "early-machinelicm", "Early Machine Loop Invariant Code Motion", false, false) INITIALIZE_PASS_END(EarlyMachineLICM |
| static bool | InstructionStoresToFI (const MachineInstr *MI, int FI) |
| Return true if instruction stores to the specified frame. | |
| static void | applyBitsNotInRegMaskToRegUnitsMask (const TargetRegisterInfo &TRI, BitVector &RUs, const uint32_t *Mask) |
| static bool | isOperandKill (const MachineOperand &MO, MachineRegisterInfo *MRI) |
| static bool | mayLoadFromGOTOrConstantPool (MachineInstr &MI) |
| Return true if this machine instruction loads from global offset table or constant pool. | |
| static bool | isInvariantStore (const MachineInstr &MI, const TargetRegisterInfo *TRI, const MachineRegisterInfo *MRI) |
| static bool | isCopyFeedingInvariantStore (const MachineInstr &MI, const MachineRegisterInfo *MRI, const TargetRegisterInfo *TRI) |
Variables | |
| static cl::opt< bool > | AvoidSpeculation ("avoid-speculation", cl::desc("MachineLICM should avoid speculation"), cl::init(true), cl::Hidden) |
| static cl::opt< bool > | HoistCheapInsts ("hoist-cheap-insts", cl::desc("MachineLICM should hoist even cheap instructions"), cl::init(false), cl::Hidden) |
| static cl::opt< bool > | HoistConstStores ("hoist-const-stores", cl::desc("Hoist invariant stores"), cl::init(true), cl::Hidden) |
| static cl::opt< bool > | HoistConstLoads ("hoist-const-loads", cl::desc("Hoist invariant loads"), cl::init(true), cl::Hidden) |
| static cl::opt< unsigned > | BlockFrequencyRatioThreshold ("block-freq-ratio-threshold", cl::desc("Do not hoist instructions if target" "block is N times hotter than the source."), cl::init(100), cl::Hidden) |
| static cl::opt< UseBFI > | DisableHoistingToHotterBlocks ("disable-hoisting-to-hotter-blocks", cl::desc("Disable hoisting instructions to" " hotter blocks"), cl::init(UseBFI::PGO), cl::Hidden, cl::values(clEnumValN(UseBFI::None, "none", "disable the feature"), clEnumValN(UseBFI::PGO, "pgo", "enable the feature when using profile data"), clEnumValN(UseBFI::All, "all", "enable the feature with/wo profile data"))) |
| DEBUG_TYPE | |
| Machine Loop Invariant Code | Motion |
| Machine Loop Invariant Code | false |
| Machine Loop Invariant Code false early | machinelicm |
| #define DEBUG_TYPE "machinelicm" |
Definition at line 58 of file MachineLICM.cpp.
| #define GET_RESULT | ( | RESULT, | |
| GETTER, | |||
| INFIX ) |
Definition at line 360 of file MachineLICM.cpp.
|
strong |
| Enumerator | |
|---|---|
| None | |
| PGO | |
| All | |
Definition at line 87 of file MachineLICM.cpp.
|
static |
Definition at line 450 of file MachineLICM.cpp.
References llvm::BitVector::set(), and TRI.
| Machine Loop Invariant Code false INITIALIZE_PASS_BEGIN | ( | EarlyMachineLICM | , |
| "early-machinelicm" | , | ||
| "Early Machine Loop Invariant Code Motion" | , | ||
| false | , | ||
| false | ) |
References INITIALIZE_PASS_BEGIN, and INITIALIZE_PASS_DEPENDENCY.
| INITIALIZE_PASS_BEGIN | ( | MachineLICM | , |
| DEBUG_TYPE | , | ||
| "Machine Loop Invariant Code Motion" | , | ||
| false | , | ||
| false | ) |
References DEBUG_TYPE, and INITIALIZE_PASS_DEPENDENCY.
|
static |
Return true if instruction stores to the specified frame.
Definition at line 429 of file MachineLICM.cpp.
References llvm::dyn_cast(), and MI.
|
static |
Definition at line 1047 of file MachineLICM.cpp.
References llvm::Register::asMCReg(), assert(), isInvariantStore(), llvm::Register::isVirtual(), MI, MRI, TRI, and UseMI.
|
static |
Definition at line 1013 of file MachineLICM.cpp.
References llvm::MachineOperand::getReg(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isReg(), MI, MRI, Reg, and TRI.
Referenced by isCopyFeedingInvariantStore().
|
static |
Definition at line 906 of file MachineLICM.cpp.
References llvm::MachineOperand::getReg(), llvm::MachineOperand::isKill(), and MRI.
|
static |
Return true if this machine instruction loads from global offset table or constant pool.
Definition at line 990 of file MachineLICM.cpp.
| STATISTIC | ( | NumCSEed | , |
| "Number of hoisted machine instructions CSEed" | ) |
| STATISTIC | ( | NumHighLatency | , |
| "Number of high latency instructions hoisted" | ) |
| STATISTIC | ( | NumHoisted | , |
| "Number of machine instructions hoisted out of loops" | ) |
| STATISTIC | ( | NumLowRP | , |
| "Number of instructions hoisted in low reg pressure situation" | ) |
| STATISTIC | ( | NumNotHoistedDueToHotness | , |
| "Number of instructions not hoisted due to block frequency" | ) |
| STATISTIC | ( | NumPostRAHoisted | , |
| "Number of machine instructions hoisted out of loops post regalloc" | ) |
|
static |
|
static |
| DEBUG_TYPE |
Definition at line 340 of file MachineLICM.cpp.
|
static |
Definition at line 341 of file MachineLICM.cpp.
|
static |
|
static |
|
static |
Definition at line 349 of file MachineLICM.cpp.