LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Namespaces | Macros | Enumerations | Functions | Variables
HexagonVLIWPacketizer.cpp File Reference
#include "llvm/CodeGen/DFAPacketizer.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/MachineDominators.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/CodeGen/ScheduleDAGInstrs.h"
#include "llvm/CodeGen/LatencyPriorityQueue.h"
#include "llvm/CodeGen/SchedulerRegistry.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
#include "llvm/CodeGen/ScheduleHazardRecognizer.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetRegisterInfo.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/MC/MCInstrItineraries.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "Hexagon.h"
#include "HexagonTargetMachine.h"
#include "HexagonRegisterInfo.h"
#include "HexagonSubtarget.h"
#include "HexagonMachineFunctionInfo.h"
#include <map>
#include <vector>
Include dependency graph for HexagonVLIWPacketizer.cpp:

Go to the source code of this file.

Namespaces

 llvm
 List of target independent CodeGen pass IDs.
 

Macros

#define DEBUG_TYPE   "packets"
 

Enumerations

enum  PredicateKind { PK_False, PK_True, PK_Unknown }
 

Functions

void llvm::initializeHexagonPacketizerPass (PassRegistry &)
 
 INITIALIZE_PASS_BEGIN (HexagonPacketizer,"packets","Hexagon Packetizer", false, false) INITIALIZE_PASS_END(HexagonPacketizer
 
static bool IsIndirectCall (MachineInstr *MI)
 
static bool IsRegDependence (const SDep::Kind DepType)
 
static bool IsDirectJump (MachineInstr *MI)
 
static bool IsSchedBarrier (MachineInstr *MI)
 
static bool IsControlFlow (MachineInstr *MI)
 
static bool IsLoopN (MachineInstr *MI)
 
static bool DoesModifyCalleeSavedReg (MachineInstr *MI, const TargetRegisterInfo *TRI)
 
static PredicateKind getPredicateSense (MachineInstr *MI, const HexagonInstrInfo *QII)
 
static MachineOperandGetPostIncrementOperand (MachineInstr *MI, const HexagonInstrInfo *QII)
 
static MachineOperandGetStoreValueOperand (MachineInstr *MI)
 
static unsigned getPredicatedRegister (MachineInstr *MI, const HexagonInstrInfo *QII)
 Gets the predicate register of a predicated instruction. More...
 

Variables

static cl::opt< boolPacketizeVolatiles ("hexagon-packetize-volatiles", cl::ZeroOrMore, cl::Hidden, cl::init(true), cl::desc("Allow non-solo packetization of volatile memory references"))
 
 packets
 
Hexagon Packetizer
 
Hexagon false
 

Macro Definition Documentation

#define DEBUG_TYPE   "packets"

Definition at line 19 of file HexagonVLIWPacketizer.cpp.

Enumeration Type Documentation

Enumerator
PK_False 
PK_True 
PK_Unknown 

Definition at line 455 of file HexagonVLIWPacketizer.cpp.

Function Documentation

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

DoesModifyCalleeSavedReg - Returns true if the instruction modifies a callee-saved register.

Definition at line 392 of file HexagonVLIWPacketizer.cpp.

References llvm::TargetRegisterInfo::getCalleeSavedRegs(), and llvm::MachineInstr::modifiesRegister().

static MachineOperand& GetPostIncrementOperand ( MachineInstr MI,
const HexagonInstrInfo QII 
)
static
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 841 of file HexagonVLIWPacketizer.cpp.

References llvm::MachineOperand::getReg(), llvm::HexagonInstrInfo::isPredicated(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUse(), llvm_unreachable, llvm::MachineInstr::operands_begin(), and llvm::MachineInstr::operands_end().

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

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

Definition at line 463 of file HexagonVLIWPacketizer.cpp.

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

static MachineOperand& GetStoreValueOperand ( MachineInstr MI)
static
INITIALIZE_PASS_BEGIN ( HexagonPacketizer  ,
"packets"  ,
"Hexagon Packetizer ,
false  ,
false   
)
static bool IsControlFlow ( MachineInstr MI)
static
static bool IsDirectJump ( MachineInstr MI)
static

Definition at line 369 of file HexagonVLIWPacketizer.cpp.

References llvm::MachineInstr::getOpcode().

static bool IsIndirectCall ( MachineInstr MI)
static

Definition at line 267 of file HexagonVLIWPacketizer.cpp.

References llvm::MachineInstr::getOpcode().

static bool IsLoopN ( MachineInstr MI)
static

Definition at line 385 of file HexagonVLIWPacketizer.cpp.

References llvm::MachineInstr::getOpcode().

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

Definition at line 364 of file HexagonVLIWPacketizer.cpp.

References llvm::SDep::Anti, llvm::SDep::Data, and llvm::SDep::Output.

static bool IsSchedBarrier ( MachineInstr MI)
static

Variable Documentation

Hexagon false

Definition at line 180 of file HexagonVLIWPacketizer.cpp.

Hexagon Packetizer

Definition at line 180 of file HexagonVLIWPacketizer.cpp.

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
packets

Definition at line 180 of file HexagonVLIWPacketizer.cpp.