LLVM API Documentation
#include "llvm/CodeGen/ScheduleDAGInstrs.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/CodeGen/LiveIntervalAnalysis.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/PseudoSourceValue.h"
#include "llvm/CodeGen/RegisterPressure.h"
#include "llvm/CodeGen/ScheduleDFS.h"
#include "llvm/IR/Operator.h"
#include "llvm/MC/MCInstrItineraries.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetRegisterInfo.h"
#include "llvm/Target/TargetSubtargetInfo.h"
#include <queue>
Go to the source code of this file.
Classes | |
class | llvm::SchedDFSImpl |
Internal state used to compute SchedDFSResult. More... | |
Namespaces | |
llvm | |
List of target independent CodeGen pass IDs. | |
Macros | |
#define | DEBUG_TYPE "misched" |
Typedefs | |
typedef SmallVector < PointerIntPair< const Value *, 1, bool >, 4 > | UnderlyingObjectsVector |
Variables | |
static cl::opt< bool > | EnableAASchedMI ("enable-aa-sched-mi", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable use of AA during MI GAD construction")) |
#define DEBUG_TYPE "misched" |
Definition at line 15 of file ScheduleDAGInstrs.cpp.
typedef SmallVector<PointerIntPair<const Value *, 1, bool>, 4> UnderlyingObjectsVector |
Definition at line 122 of file ScheduleDAGInstrs.cpp.
|
inlinestatic |
Check whether two objects need a chain edge, if so, add it otherwise remember the rejected SU.
Definition at line 640 of file ScheduleDAGInstrs.cpp.
References llvm::SUnit::addPred(), llvm::SDep::Barrier, llvm::dbgs(), DEBUG, llvm::SUnit::getInstr(), llvm::SDep::MayAliasMem, MIsNeedChainEdge(), llvm::SUnit::NodeNum, and llvm::SDep::setLatency().
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph().
|
static |
This function assumes that "downward" from SU there exist tail/leaf of already constructed DAG. It iterates downward and checks whether SU can be aliasing any node dominated by it.
Definition at line 609 of file ScheduleDAGInstrs.cpp.
References llvm::SUnit::getInstr(), I, llvm::ARM_PROC::IE, iterateChainSucc(), llvm::SDep::MayAliasMem, MIsNeedChainEdge(), and llvm::SDep::setLatency().
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph().
getUnderlyingObjectFromInt - This is the function that does the work of looking through basic ptrtoint+arithmetic+inttoptr sequences.
Definition at line 65 of file ScheduleDAGInstrs.cpp.
References llvm::Operator::getOpcode(), llvm::Value::getType(), and llvm::Type::isIntegerTy().
Referenced by getUnderlyingObjects().
|
static |
getUnderlyingObjects - This is a wrapper around GetUnderlyingObjects and adds support for basic ptrtoint+arithmetic+inttoptr sequences.
Definition at line 93 of file ScheduleDAGInstrs.cpp.
References llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::Operator::getOpcode(), llvm::Value::getType(), getUnderlyingObjectFromInt(), llvm::GetUnderlyingObjects(), I, llvm::ARM_PROC::IE, llvm::SmallPtrSet< PtrType, SmallSize >::insert(), llvm::Type::isPointerTy(), llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Referenced by getUnderlyingObjectsForInstr(), and isUnsafeMemoryObject().
|
static |
getUnderlyingObjectsForInstr - If this machine instr has memory reference information and it can be tracked to a normal reference to a known object, return the Value for that object.
Definition at line 127 of file ScheduleDAGInstrs.cpp.
References llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorImpl< T >::clear(), llvm::SmallVectorTemplateCommon< T >::end(), getUnderlyingObjects(), llvm::MachineInstr::hasOneMemOperand(), I, llvm::ARM_PROC::IE, llvm::isIdentifiedObject(), llvm::MachineInstr::memoperands_begin(), and llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph().
Definition at line 1250 of file ScheduleDAGInstrs.cpp.
References llvm::SDep::Data, and llvm::SUnit::Succs.
Referenced by llvm::SchedDFSResult::compute().
|
inlinestatic |
Return true if MI is an instruction we are unable to reason about (like a call or something with unmodeled side effects).
Definition at line 451 of file ScheduleDAGInstrs.cpp.
References llvm::MachineInstr::hasOrderedMemoryRef(), llvm::MachineInstr::hasUnmodeledSideEffects(), llvm::MachineInstr::isCall(), llvm::MachineInstr::isInvariantLoad(), and llvm::MachineInstr::mayLoad().
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph(), and iterateChainSucc().
|
inlinestatic |
Definition at line 461 of file ScheduleDAGInstrs.cpp.
References llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), getUnderlyingObjects(), llvm::MachineInstr::hasUnmodeledSideEffects(), I, llvm::ARM_PROC::IE, llvm::isIdentifiedObject(), llvm::MachineInstr::memoperands_begin(), and llvm::MachineInstr::memoperands_empty().
Referenced by MIsNeedChainEdge().
|
static |
This recursive function iterates over chain deps of SUb looking for "latest" node that needs a chain edge to SUa.
Definition at line 564 of file ScheduleDAGInstrs.cpp.
References llvm::SUnit::addPred(), llvm::SUnit::getInstr(), I, llvm::SmallPtrSet< PtrType, SmallSize >::insert(), isGlobalMemoryObject(), llvm::SUnit::isSucc(), llvm::SDep::MayAliasMem, MIsNeedChainEdge(), and llvm::SUnit::Succs.
Referenced by adjustChainDeps().
|
static |
This returns true if the two MIs need a chain edge betwee them. If these are not even memory operations, we still may need chain deps between them. The question really is - could these two MIs be reordered during scheduling from memory dependency point of view.
Definition at line 503 of file ScheduleDAGInstrs.cpp.
References llvm::AliasAnalysis::alias(), llvm::MachineMemOperand::getOffset(), llvm::MachineMemOperand::getSize(), llvm::MachineMemOperand::getTBAAInfo(), llvm::MachineMemOperand::getValue(), llvm::MachineInstr::hasOneMemOperand(), isUnsafeMemoryObject(), llvm_unreachable, llvm::MachineInstr::mayStore(), llvm::MachineInstr::memoperands_begin(), and llvm::AliasAnalysis::NoAlias.
Referenced by addChainDependency(), adjustChainDeps(), and iterateChainSucc().