LLVM  9.0.0svn
Namespaces | Macros | Enumerations | Functions | Variables
HexagonVLIWPacketizer.cpp File Reference
#include "HexagonVLIWPacketizer.h"
#include "Hexagon.h"
#include "HexagonInstrInfo.h"
#include "HexagonRegisterInfo.h"
#include "HexagonSubtarget.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineBranchProbabilityInfo.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/MachineInstrBundle.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstdint>
#include <iterator>
Include dependency graph for HexagonVLIWPacketizer.cpp:

Go to the source code of this file.

Namespaces

 llvm
 This class represents lattice values for constants.
 

Macros

#define DEBUG_TYPE   "packets"
 

Enumerations

enum  PredicateKind { PK_False, PK_True, PK_Unknown }
 

Functions

FunctionPassllvm::createHexagonPacketizer (bool Minimal)
 
void llvm::initializeHexagonPacketizerPass (PassRegistry &)
 
 INITIALIZE_PASS_BEGIN (HexagonPacketizer, "hexagon-packetizer", "Hexagon Packetizer", false, false) INITIALIZE_PASS_END(HexagonPacketizer
 
static bool hasWriteToReadDep (const MachineInstr &FirstI, const MachineInstr &SecondI, const TargetRegisterInfo *TRI)
 
static MachineBasicBlock::iterator moveInstrOut (MachineInstr &MI, MachineBasicBlock::iterator BundleIt, bool Before)
 
static bool isRegDependence (const SDep::Kind DepType)
 
static bool isDirectJump (const MachineInstr &MI)
 
static bool isSchedBarrier (const MachineInstr &MI)
 
static bool isControlFlow (const MachineInstr &MI)
 
static bool doesModifyCalleeSavedReg (const MachineInstr &MI, const TargetRegisterInfo *TRI)
 Returns true if the instruction modifies a callee-saved register. More...
 
static PredicateKind getPredicateSense (const MachineInstr &MI, const HexagonInstrInfo *HII)
 Returns true if an instruction is predicated on p0 and false if it's predicated on !p0. More...
 
static const MachineOperandgetPostIncrementOperand (const MachineInstr &MI, const HexagonInstrInfo *HII)
 
static const MachineOperandgetStoreValueOperand (const MachineInstr &MI)
 
static bool isLoadAbsSet (const MachineInstr &MI)
 
static const MachineOperandgetAbsSetOperand (const MachineInstr &MI)
 
static bool isImplicitDependency (const MachineInstr &I, bool CheckDef, unsigned DepReg)
 
static unsigned getPredicatedRegister (MachineInstr &MI, const HexagonInstrInfo *QII)
 Gets the predicate register of a predicated instruction. More...
 
static bool cannotCoexistAsymm (const MachineInstr &MI, const MachineInstr &MJ, const HexagonInstrInfo &HII)
 
static bool isSystemInstr (const MachineInstr &MI)
 

Variables

static cl::opt< boolDisablePacketizer ("disable-packetizer", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon packetizer pass"))
 
cl::opt< boolSlot1Store ("slot1-store-slot0-load", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Allow slot1 store and slot0 load"))
 
static cl::opt< boolPacketizeVolatiles ("hexagon-packetize-volatiles", cl::ZeroOrMore, cl::Hidden, cl::init(true), cl::desc("Allow non-solo packetization of volatile memory references"))
 
static cl::opt< boolEnableGenAllInsnClass ("enable-gen-insn", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Generate all instruction with TC"))
 
static cl::opt< boolDisableVecDblNVStores ("disable-vecdbl-nv-stores", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Disable vector double new-value-stores"))
 
cl::opt< boolScheduleInlineAsm
 
hexagon packetizer
 
hexagon Hexagon Packetizer
 
hexagon Hexagon false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "packets"

Definition at line 54 of file HexagonVLIWPacketizer.cpp.

Enumeration Type Documentation

◆ PredicateKind

Enumerator
PK_False 
PK_True 
PK_Unknown 

Definition at line 550 of file HexagonVLIWPacketizer.cpp.

Function Documentation

◆ cannotCoexistAsymm()

static bool cannotCoexistAsymm ( const MachineInstr MI,
const MachineInstr MJ,
const HexagonInstrInfo HII 
)
static

◆ doesModifyCalleeSavedReg()

static bool doesModifyCalleeSavedReg ( const MachineInstr MI,
const TargetRegisterInfo TRI 
)
static

◆ getAbsSetOperand()

static const MachineOperand& getAbsSetOperand ( const MachineInstr MI)
static

◆ getPostIncrementOperand()

static const MachineOperand& getPostIncrementOperand ( const MachineInstr MI,
const HexagonInstrInfo HII 
)
static

◆ getPredicatedRegister()

static unsigned getPredicatedRegister ( MachineInstr MI,
const HexagonInstrInfo QII 
)
static

Gets the predicate register of a predicated instruction.

We use the following rule: The first predicate register that is a use is the predicate register of a predicated instruction.

Definition at line 939 of file HexagonVLIWPacketizer.cpp.

References assert(), llvm::HexagonInstrInfo::isPredicated(), llvm_unreachable, and llvm::MachineInstr::operands().

Referenced by llvm::HexagonPacketizerList::arePredicatesComplements().

◆ getPredicateSense()

static PredicateKind getPredicateSense ( const MachineInstr MI,
const HexagonInstrInfo HII 
)
static

Returns true if an instruction is predicated on p0 and false if it's predicated on !p0.

Definition at line 558 of file HexagonVLIWPacketizer.cpp.

References llvm::HexagonInstrInfo::isPredicated(), llvm::HexagonInstrInfo::isPredicatedTrue(), PK_False, PK_True, and PK_Unknown.

Referenced by llvm::HexagonPacketizerList::arePredicatesComplements(), and llvm::HexagonPacketizerList::canPromoteToNewValueStore().

◆ getStoreValueOperand()

static const MachineOperand& getStoreValueOperand ( const MachineInstr MI)
static

◆ hasWriteToReadDep()

static bool hasWriteToReadDep ( const MachineInstr FirstI,
const MachineInstr SecondI,
const TargetRegisterInfo TRI 
)
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( HexagonPacketizer  ,
"hexagon-packetizer ,
"Hexagon Packetizer ,
false  ,
false   
)

◆ isControlFlow()

static bool isControlFlow ( const MachineInstr MI)
static

◆ isDirectJump()

static bool isDirectJump ( const MachineInstr MI)
static

◆ isImplicitDependency()

static bool isImplicitDependency ( const MachineInstr I,
bool  CheckDef,
unsigned  DepReg 
)
static

◆ isLoadAbsSet()

static bool isLoadAbsSet ( const MachineInstr MI)
static

◆ isRegDependence()

static bool isRegDependence ( const SDep::Kind  DepType)
static

◆ isSchedBarrier()

static bool isSchedBarrier ( const MachineInstr MI)
static

◆ isSystemInstr()

static bool isSystemInstr ( const MachineInstr MI)
static

◆ moveInstrOut()

static MachineBasicBlock::iterator moveInstrOut ( MachineInstr MI,
MachineBasicBlock::iterator  BundleIt,
bool  Before 
)
static

Variable Documentation

◆ DisablePacketizer

cl::opt<bool> DisablePacketizer("disable-packetizer", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable Hexagon packetizer pass"))
static

Referenced by moveInstrOut().

◆ DisableVecDblNVStores

cl::opt<bool> DisableVecDblNVStores("disable-vecdbl-nv-stores", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Disable vector double new-value-stores"))
static

◆ EnableGenAllInsnClass

cl::opt<bool> EnableGenAllInsnClass("enable-gen-insn", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Generate all instruction with TC"))
static

Referenced by moveInstrOut().

◆ false

hexagon Hexagon false

Definition at line 128 of file HexagonVLIWPacketizer.cpp.

◆ packetizer

hexagon packetizer

Definition at line 128 of file HexagonVLIWPacketizer.cpp.

◆ Packetizer

hexagon Hexagon Packetizer

Definition at line 128 of file HexagonVLIWPacketizer.cpp.

Referenced by moveInstrOut().

◆ PacketizeVolatiles

cl::opt<bool> PacketizeVolatiles("hexagon-packetize-volatiles", cl::ZeroOrMore, cl::Hidden, cl::init(true), cl::desc("Allow non-solo packetization of volatile memory references"))
static

◆ ScheduleInlineAsm

cl::opt<bool> ScheduleInlineAsm

◆ Slot1Store

cl::opt<bool> Slot1Store("slot1-store-slot0-load", cl::Hidden, cl::ZeroOrMore, cl::init(true), cl::desc("Allow slot1 store and slot0 load"))