LLVM
8.0.1
|
#include "HexagonInstrInfo.h"
#include "Hexagon.h"
#include "HexagonFrameLowering.h"
#include "HexagonHazardRecognizer.h"
#include "HexagonRegisterInfo.h"
#include "HexagonSubtarget.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/CodeGen/DFAPacketizer.h"
#include "llvm/CodeGen/LivePhysRegs.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineBranchProbabilityInfo.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineInstrBundle.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetOpcodes.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCInstrItineraries.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MachineValueType.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include <cassert>
#include <cctype>
#include <cstdint>
#include <cstring>
#include <iterator>
#include <string>
#include <utility>
#include "HexagonDepTimingClasses.h"
#include "HexagonGenDFAPacketizer.inc"
#include "HexagonGenInstrInfo.inc"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "hexagon-instrinfo" |
#define | GET_INSTRINFO_CTOR_DTOR |
#define | GET_INSTRMAP_INFO |
Functions | |
static bool | isIntRegForSubInst (unsigned Reg) |
static bool | isDblRegForSubInst (unsigned Reg, const HexagonRegisterInfo &HRI) |
static unsigned | nonDbgMICount (MachineBasicBlock::const_instr_iterator MIB, MachineBasicBlock::const_instr_iterator MIE) |
Calculate number of instructions excluding the debug instructions. More... | |
static void | parseOperands (const MachineInstr &MI, SmallVector< unsigned, 4 > &Defs, SmallVector< unsigned, 8 > &Uses) |
Gather register def/uses from MI. More... | |
static bool | isDuplexPairMatch (unsigned Ga, unsigned Gb) |
static void | getLiveRegsAt (LivePhysRegs &Regs, const MachineInstr &MI) |
Variables | |
cl::opt< bool > | ScheduleInlineAsm ("hexagon-sched-inline-asm", cl::Hidden, cl::init(false), cl::desc("Do not consider inline-asm a scheduling/" "packetization boundary.")) |
static cl::opt< bool > | EnableBranchPrediction ("hexagon-enable-branch-prediction", cl::Hidden, cl::init(true), cl::desc("Enable branch prediction")) |
static cl::opt< bool > | DisableNVSchedule ("disable-hexagon-nv-schedule", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Disable schedule adjustment for new value stores.")) |
static cl::opt< bool > | EnableTimingClassLatency ("enable-timing-class-latency", cl::Hidden, cl::init(false), cl::desc("Enable timing class latency")) |
static cl::opt< bool > | EnableALUForwarding ("enable-alu-forwarding", cl::Hidden, cl::init(true), cl::desc("Enable vec alu forwarding")) |
static cl::opt< bool > | EnableACCForwarding ("enable-acc-forwarding", cl::Hidden, cl::init(true), cl::desc("Enable vec acc forwarding")) |
static cl::opt< bool > | BranchRelaxAsmLarge ("branch-relax-asm-large", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("branch relax asm")) |
static cl::opt< bool > | UseDFAHazardRec ("dfa-hazard-rec", cl::init(true), cl::Hidden, cl::ZeroOrMore, cl::desc("Use the DFA based hazard recognizer.")) |
const int | Hexagon_MEMW_OFFSET_MAX = 4095 |
Constants for Hexagon instructions. More... | |
const int | Hexagon_MEMW_OFFSET_MIN = -4096 |
const int | Hexagon_MEMD_OFFSET_MAX = 8191 |
const int | Hexagon_MEMD_OFFSET_MIN = -8192 |
const int | Hexagon_MEMH_OFFSET_MAX = 2047 |
const int | Hexagon_MEMH_OFFSET_MIN = -2048 |
const int | Hexagon_MEMB_OFFSET_MAX = 1023 |
const int | Hexagon_MEMB_OFFSET_MIN = -1024 |
const int | Hexagon_ADDI_OFFSET_MAX = 32767 |
const int | Hexagon_ADDI_OFFSET_MIN = -32768 |
#define DEBUG_TYPE "hexagon-instrinfo" |
Definition at line 65 of file HexagonInstrInfo.cpp.
#define GET_INSTRINFO_CTOR_DTOR |
Definition at line 67 of file HexagonInstrInfo.cpp.
#define GET_INSTRMAP_INFO |
Definition at line 68 of file HexagonInstrInfo.cpp.
|
static |
Definition at line 998 of file HexagonInstrInfo.cpp.
References llvm::LivePhysRegs::addLiveOuts(), B, E, llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineInstr::getParent(), I, llvm::MachineBasicBlock::rbegin(), and llvm::LivePhysRegs::stepBackward().
Referenced by llvm::HexagonInstrInfo::expandPostRAPseudo().
|
static |
Definition at line 127 of file HexagonInstrInfo.cpp.
References isIntRegForSubInst().
Referenced by llvm::HexagonInstrInfo::getDuplexCandidateGroup(), and llvm::HexagonMCInstrInfo::inRange().
Definition at line 210 of file HexagonInstrInfo.cpp.
References llvm::HexagonII::HSIG_A, llvm::HexagonII::HSIG_Compound, llvm::HexagonII::HSIG_L1, llvm::HexagonII::HSIG_L2, llvm::HexagonII::HSIG_None, llvm::HexagonII::HSIG_S1, and llvm::HexagonII::HSIG_S2.
Referenced by llvm::HexagonMCInstrInfo::inRange(), llvm::HexagonMCInstrInfo::isDuplexPair(), llvm::HexagonInstrInfo::isDuplexPair(), and llvm::HexagonMCInstrInfo::isOrderedDuplexPair().
Definition at line 122 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::getCompoundCandidateGroup(), llvm::HexagonInstrInfo::getDuplexCandidateGroup(), llvm::HexagonMCInstrInfo::inRange(), and isDblRegForSubInst().
|
static |
Calculate number of instructions excluding the debug instructions.
Definition at line 133 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::nonDbgBBSize(), and llvm::HexagonInstrInfo::nonDbgBundleSize().
|
inlinestatic |
Gather register def/uses from MI.
This treats possible (predicated) defs as actually happening ones (conservatively).
Definition at line 186 of file HexagonInstrInfo.cpp.
References llvm::SmallVectorImpl< T >::clear(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUse(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and Reg.
Referenced by llvm::HexagonInstrInfo::isDependent().
|
static |
Referenced by llvm::HexagonInstrInfo::getSize().
|
static |
Referenced by llvm::HexagonInstrInfo::canExecuteInBundle().
|
static |
Referenced by llvm::HexagonInstrInfo::isVecUsableNextPacket().
|
static |
Referenced by llvm::HexagonInstrInfo::isVecUsableNextPacket().
|
static |
Referenced by llvm::HexagonInstrInfo::invertAndChangeJumpTarget().
|
static |
const int Hexagon_ADDI_OFFSET_MAX = 32767 |
Definition at line 112 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::isValidOffset().
const int Hexagon_ADDI_OFFSET_MIN = -32768 |
Definition at line 113 of file HexagonInstrInfo.cpp.
const int Hexagon_MEMB_OFFSET_MAX = 1023 |
Definition at line 110 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::isValidOffset().
const int Hexagon_MEMB_OFFSET_MIN = -1024 |
Definition at line 111 of file HexagonInstrInfo.cpp.
const int Hexagon_MEMD_OFFSET_MAX = 8191 |
Definition at line 106 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::isValidOffset().
const int Hexagon_MEMD_OFFSET_MIN = -8192 |
Definition at line 107 of file HexagonInstrInfo.cpp.
const int Hexagon_MEMH_OFFSET_MAX = 2047 |
Definition at line 108 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::isValidOffset().
const int Hexagon_MEMH_OFFSET_MIN = -2048 |
Definition at line 109 of file HexagonInstrInfo.cpp.
const int Hexagon_MEMW_OFFSET_MAX = 4095 |
Constants for Hexagon instructions.
Definition at line 104 of file HexagonInstrInfo.cpp.
Referenced by llvm::HexagonInstrInfo::isValidOffset().
const int Hexagon_MEMW_OFFSET_MIN = -4096 |
Definition at line 105 of file HexagonInstrInfo.cpp.
|
static |
Referenced by llvm::HexagonInstrInfo::CreateTargetPostRAHazardRecognizer().