LLVM: lib/Target/X86/X86AvoidStoreForwardingBlocks.cpp File Reference (original ) (raw )Go to the source code of this file.
Functions
INITIALIZE_PASS_BEGIN (X86AvoidSFBPass, DEBUG_TYPE , "Machine code sinking", false, false) INITIALIZE_PASS_END (X86AvoidSFBPass
static bool
isXMMLoadOpcode (unsigned Opcode)
static bool
isYMMLoadOpcode (unsigned Opcode)
static bool
isPotentialBlockedMemCpyLd (unsigned Opcode)
static bool
isPotentialBlockedMemCpyPair (unsigned LdOpcode, unsigned StOpcode)
static bool
isPotentialBlockingStoreInst (unsigned Opcode, unsigned LoadOpcode)
static unsigned
getYMMtoXMMLoadOpcode (unsigned LoadOpcode)
static unsigned
getYMMtoXMMStoreOpcode (unsigned StoreOpcode)
static int
getAddrOffset (const MachineInstr *MI )
static MachineOperand &
getBaseOperand (MachineInstr *MI )
static MachineOperand &
getDispOperand (MachineInstr *MI )
static bool
isRelevantAddressingMode (MachineInstr *MI )
static SmallVector < MachineInstr *, 2 >
findPotentialBlockers (MachineInstr *LoadInst )
static void
updateKillStatus (MachineInstr *LoadInst , MachineInstr *StoreInst )
static bool
hasSameBaseOpValue (MachineInstr *LoadInst , MachineInstr *StoreInst )
static bool
isBlockingStore (int64_t LoadDispImm, unsigned LoadSize, int64_t StoreDispImm, unsigned StoreSize)
static void
updateBlockingStoresDispSizeMap (DisplacementSizeMap &BlockingStoresDispSizeMap, int64_t DispImm, unsigned Size )
static void
removeRedundantBlockingStores (DisplacementSizeMap &BlockingStoresDispSizeMap)
◆ DEBUG_TYPE#define DEBUG_TYPE "x86-avoid-SFB"
◆ findPotentialBlockers()◆ getAddrOffset()◆ getBaseOperand()◆ getDispOperand()◆ getYMMtoXMMLoadOpcode()◆ getYMMtoXMMStoreOpcode()◆ hasSameBaseOpValue()◆ INITIALIZE_PASS_BEGIN()
INITIALIZE_PASS_BEGIN
(
X86AvoidSFBPass
,
DEBUG_TYPE
,
"Machine code sinking"
,
false
,
false
)
◆ isBlockingStore()
bool isBlockingStore ( int64_t LoadDispImm , unsigned LoadSize , int64_t StoreDispImm , unsigned StoreSize )
static
◆ isPotentialBlockedMemCpyLd()◆ isPotentialBlockedMemCpyPair()◆ isPotentialBlockingStoreInst()◆ isRelevantAddressingMode()Definition at line 311 of file X86AvoidStoreForwardingBlocks.cpp .
References llvm::X86::AddrIndexReg , llvm::X86::AddrScaleAmt , llvm::X86::AddrSegmentReg , llvm::sampleprof::Base , getAddrOffset() , getBaseOperand() , getDispOperand() , llvm::MachineOperand::getImm() , llvm::MachineOperand::getReg() , llvm::MachineOperand::isImm() , llvm::MachineOperand::isReg() , and MI .
◆ isXMMLoadOpcode()◆ isYMMLoadOpcode()◆ removeRedundantBlockingStores()
void removeRedundantBlockingStores ( DisplacementSizeMap & BlockingStoresDispSizeMap )
static
◆ updateBlockingStoresDispSizeMap()
void updateBlockingStoresDispSizeMap ( DisplacementSizeMap & BlockingStoresDispSizeMap , int64_t DispImm , unsigned Size )
static
◆ updateKillStatus()◆ DEBUG_TYPE◆ DisableX86AvoidStoreForwardBlocks
cl::opt < bool > DisableX86AvoidStoreForwardBlocks("x86-disable-avoid-SFB", cl::Hidden, cl::desc ("X86: Disable Store Forwarding Blocks fixup."), cl::init(false)) ( "x86-disable-avoid-SFB" , cl::Hidden , cl::desc ("X86: Disable Store Forwarding Blocks fixup.") , cl::init(false) )
static
◆ false◆ MOV128SZ◆ MOV16SZ◆ MOV32SZ◆ MOV64SZ◆ MOV8SZ◆ sinking◆ X86AvoidSFBInspectionLimit
cl::opt < unsigned > X86AvoidSFBInspectionLimit("x86-sfb-inspection-limit", cl::desc ("X86: Number of instructions backward to " "inspect for store forwarding blocks."), cl::init(20), cl::Hidden) ( "x86-sfb-inspection-limit" , cl::desc ("X86: Number of instructions backward to " "inspect for store forwarding blocks.") , cl::init(20) , cl::Hidden )
static