|
LLVM 23.0.0git
|
#include "AArch64InstrInfo.h"#include "AArch64MachineFunctionInfo.h"#include "AArch64Subtarget.h"#include "MCTargetDesc/AArch64AddressingModes.h"#include "llvm/ADT/SetVector.h"#include "llvm/ADT/SmallVector.h"#include "llvm/ADT/Statistic.h"#include "llvm/ADT/StringRef.h"#include "llvm/ADT/iterator_range.h"#include "llvm/Analysis/AliasAnalysis.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/TargetRegisterInfo.h"#include "llvm/IR/DebugLoc.h"#include "llvm/MC/MCAsmInfo.h"#include "llvm/MC/MCDwarf.h"#include "llvm/Pass.h"#include "llvm/Support/CommandLine.h"#include "llvm/Support/Debug.h"#include "llvm/Support/DebugCounter.h"#include "llvm/Support/ErrorHandling.h"#include <cassert>#include <cstdint>#include <functional>#include <iterator>#include <limits>#include <optional>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "aarch64-ldst-opt" |
| #define | AARCH64_LOAD_STORE_OPT_NAME "AArch64 load / store optimization pass" |
Variables | |
| static cl::opt< unsigned > | LdStLimit ("aarch64-load-store-scan-limit", cl::init(20), cl::Hidden) |
| static cl::opt< unsigned > | UpdateLimit ("aarch64-update-scan-limit", cl::init(100), cl::Hidden) |
| static cl::opt< unsigned > | LdStConstLimit ("aarch64-load-store-const-scan-limit", cl::init(10), cl::Hidden) |
| static cl::opt< bool > | EnableRenaming ("aarch64-load-store-renaming", cl::init(true), cl::Hidden) |
| #define AARCH64_LOAD_STORE_OPT_NAME "AArch64 load / store optimization pass" |
Definition at line 90 of file AArch64LoadStoreOptimizer.cpp.
Referenced by INITIALIZE_PASS().
| #define DEBUG_TYPE "aarch64-ldst-opt" |
Definition at line 55 of file AArch64LoadStoreOptimizer.cpp.
|
static |
This function will add a new entry into the debugValueSubstitutions table when two instruction have been merged into a new one represented by MergedInstr.
Definition at line 993 of file AArch64LoadStoreOptimizer.cpp.
References llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineFunction::makeDebugValueSubstitution(), llvm::MachineInstr::operands(), llvm::MachineInstr::peekDebugInstrNum(), and Reg.
|
static |
Definition at line 1587 of file AArch64LoadStoreOptimizer.cpp.
Referenced by llvm::TargetFrameLowering::alignSPAdjust().
|
static |
Definition at line 1673 of file AArch64LoadStoreOptimizer.cpp.
References assert(), llvm::MachineInstr::FrameDestroy, llvm::MachineInstr::FrameSetup, getLdStRegOp(), getMatchingNonSExtOpcode(), getMatchingPairOpcode(), llvm::MachineInstr::getOpcode(), llvm::MachineOperand::getReg(), llvm::MachineInstr::hasOrderedMemoryRef(), llvm::AArch64InstrInfo::isPreLdSt(), isPreLdStPairCandidate(), MI, needsWinCFI(), and TII.
|
static |
Definition at line 1742 of file AArch64LoadStoreOptimizer.cpp.
References llvm::dbgs(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getParent(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isEarlyClobber(), llvm::MachineOperand::isImplicit(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isRenamable(), isRewritableImplicitDef(), llvm::MachineOperand::isTied(), LLVM_DEBUG, and TRI.
Referenced by canRenameUpToDef().
|
static |
Definition at line 1882 of file AArch64LoadStoreOptimizer.cpp.
References llvm::LiveRegUnits::accumulate(), for(), llvm::ilist_node_impl< OptionsT >::getIterator(), getLdStRegOp(), llvm::MachineOperand::getReg(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::MachineInstr::isPseudo(), MI, Success, and TRI.
Referenced by findRenameRegForSameLdStRegPair().
|
static |
Definition at line 1778 of file AArch64LoadStoreOptimizer.cpp.
References llvm::LiveRegUnits::accumulate(), llvm::any_of(), canRenameMOP(), llvm::dbgs(), forAllMIsUntilDef(), llvm::MachineInstr::FrameSetup, getLdStRegOp(), llvm::MachineOperand::getReg(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::MachineOperand::isDebug(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isReg(), LdStLimit, LLVM_DEBUG, llvm::MachineInstr::mayStore(), MI, llvm::MachineInstr::operands(), and TRI.
Referenced by findRenameRegForSameLdStRegPair().
| DEBUG_COUNTER | ( | RegRenamingCounter | , |
| DEBUG_TYPE "-reg-renaming" | , | ||
| "Controls which pairs are considered for renaming" | ) |
References DEBUG_TYPE.
|
static |
Definition at line 1970 of file AArch64LoadStoreOptimizer.cpp.
References canRenameUntilSecondLoad(), canRenameUpToDef(), getLdStRegOp(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), getReg(), llvm::MachineFunction::getRegInfo(), llvm::MachineInstr::mayLoad(), MI, Reg, llvm::DebugCounter::shouldExecute(), llvm::MachineRegisterInfo::tracksLiveness(), TRI, and tryToFindRegisterToRename().
|
static |
Definition at line 956 of file AArch64LoadStoreOptimizer.cpp.
References llvm::any_of(), I, llvm::instructionsWithoutDebug(), MBB, MI, and TRI.
Referenced by canRenameUpToDef().
Definition at line 528 of file AArch64LoadStoreOptimizer.cpp.
References llvm_unreachable, and Opc.
|
static |
Definition at line 703 of file AArch64LoadStoreOptimizer.cpp.
References assert(), llvm::AArch64InstrInfo::isPairedLdSt(), llvm::AArch64InstrInfo::isPreLdSt(), and MI.
Referenced by areCandidatesToMergeOrPair(), canRenameUntilSecondLoad(), canRenameUpToDef(), findRenameRegForSameLdStRegPair(), and isPromotableZeroStoreInst().
Definition at line 279 of file AArch64LoadStoreOptimizer.cpp.
References Opc.
Referenced by areCandidatesToMergeOrPair().
Definition at line 353 of file AArch64LoadStoreOptimizer.cpp.
References llvm_unreachable, and Opc.
Referenced by areCandidatesToMergeOrPair().
Definition at line 334 of file AArch64LoadStoreOptimizer.cpp.
References llvm_unreachable, and Opc.
Definition at line 564 of file AArch64LoadStoreOptimizer.cpp.
References llvm_unreachable, and Opc.
Definition at line 447 of file AArch64LoadStoreOptimizer.cpp.
References llvm_unreachable, and Opc.
|
static |
Definition at line 685 of file AArch64LoadStoreOptimizer.cpp.
References llvm::AArch64InstrInfo::getMemScale(), llvm::AArch64InstrInfo::isPairedLdSt(), isTagStore(), and MI.
Definition at line 1570 of file AArch64LoadStoreOptimizer.cpp.
References llvm::Offset.
| INITIALIZE_PASS | ( | AArch64LoadStoreOptLegacy | , |
| "aarch64-ldst-opt" | , | ||
| AARCH64_LOAD_STORE_OPT_NAME | , | ||
| false | , | ||
| false | ) |
Definition at line 250 of file AArch64LoadStoreOptimizer.cpp.
References AARCH64_LOAD_STORE_OPT_NAME, and Opc.
|
static |
Definition at line 714 of file AArch64LoadStoreOptimizer.cpp.
References assert(), llvm::MachineOperand::getImm(), llvm::AArch64InstrInfo::getLdStOffsetOp(), isMatchingStore(), and TII.
|
static |
Definition at line 417 of file AArch64LoadStoreOptimizer.cpp.
References llvm::Instruction::getOpcode(), and llvm_unreachable.
Referenced by isLdOffsetInRangeOfSt().
|
static |
Definition at line 827 of file AArch64LoadStoreOptimizer.cpp.
|
static |
Definition at line 757 of file AArch64LoadStoreOptimizer.cpp.
References llvm::AArch64InstrInfo::getLdStBaseOp(), llvm::AArch64InstrInfo::getLdStOffsetOp(), llvm::AArch64FunctionInfo::isMTETagged(), MI, and Opc.
|
static |
Definition at line 651 of file AArch64LoadStoreOptimizer.cpp.
References llvm::MachineInstr::getOpcode(), and MI.
Referenced by areCandidatesToMergeOrPair().
|
static |
Definition at line 739 of file AArch64LoadStoreOptimizer.cpp.
References MI.
|
static |
Definition at line 732 of file AArch64LoadStoreOptimizer.cpp.
References getLdStRegOp(), llvm::MachineOperand::getReg(), MI, and Opc.
|
static |
Definition at line 861 of file AArch64LoadStoreOptimizer.cpp.
References llvm::MachineInstr::getOpcode(), llvm::MachineOperand::getParent(), and llvm::MachineOperand::isRenamable().
Referenced by canRenameMOP().
|
static |
Definition at line 267 of file AArch64LoadStoreOptimizer.cpp.
References MI.
Referenced by getPrePostIndexedMemOpInfo().
|
static |
Definition at line 1591 of file AArch64LoadStoreOptimizer.cpp.
References llvm::dbgs(), LLVM_DEBUG, and llvm::MachineInstr::mayAlias().
Referenced by llvm::HexagonInstrInfo::expandPostRAPseudo().
|
static |
Definition at line 2276 of file AArch64LoadStoreOptimizer.cpp.
References assert(), llvm::MachineInstr::FrameDestroy, llvm::MachineInstr::FrameSetup, llvm::MachineFunction::getFrameInstructions(), llvm::MCCFIInstruction::getOperation(), MI, llvm::MCCFIInstruction::OpDefCfa, and llvm::MCCFIInstruction::OpDefCfaOffset.
|
static |
Definition at line 1666 of file AArch64LoadStoreOptimizer.cpp.
References llvm::MachineFunction::getFunction(), llvm::TargetMachine::getMCAsmInfo(), llvm::MachineFunction::getTarget(), llvm::Function::needsUnwindTableEntry(), and llvm::MCAsmInfo::usesWindowsCFI().
Referenced by areCandidatesToMergeOrPair(), and llvm::ARMFrameLowering::emitPrologue().
| STATISTIC | ( | NumConstOffsetFolded | , |
| "Number of const offset of index address folded" | ) |
| STATISTIC | ( | NumFailedAlignmentCheck | , |
| "Number of load/store pair transformation " "not passed the alignment check" | ) |
| STATISTIC | ( | NumPairCreated | , |
| "Number of load/store pair instructions generated" | ) |
| STATISTIC | ( | NumPostFolded | , |
| "Number of post-index updates folded" | ) |
| STATISTIC | ( | NumPreFolded | , |
| "Number of pre-index updates folded" | ) |
| STATISTIC | ( | NumUnscaledPairCreated | , |
| "Number of load/store from unscaled generated" | ) |
|
static |
Definition at line 1926 of file AArch64LoadStoreOptimizer.cpp.
References llvm::LiveRegUnits::addReg(), llvm::all_of(), llvm::any_of(), llvm::LiveRegUnits::available(), llvm::CallingConv::C, llvm::dbgs(), llvm::MachineFunction::getRegInfo(), LLVM_DEBUG, llvm::printReg(), Reg, and TRI.
Referenced by findRenameRegForSameLdStRegPair().
|
static |
Definition at line 978 of file AArch64LoadStoreOptimizer.cpp.
References llvm::LiveRegUnits::addReg(), MI, llvm::phys_regs_and_masks(), llvm::LiveRegUnits::removeReg(), and TRI.
|
static |
|
static |
|
static |
Referenced by canRenameUpToDef().