LLVM  6.0.0svn
Functions
MIParser.cpp File Reference
#include "MIParser.h"
#include "MILexer.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/Twine.h"
#include "llvm/AsmParser/Parser.h"
#include "llvm/AsmParser/SlotMapping.h"
#include "llvm/CodeGen/MIRPrinter.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSlotTracker.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/ValueSymbolTable.h"
#include "llvm/MC/LaneBitmask.h"
#include "llvm/MC/MCDwarf.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/LowLevelTypeImpl.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/SMLoc.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetIntrinsicInfo.h"
#include "llvm/Target/TargetMachine.h"
#include <algorithm>
#include <cassert>
#include <cctype>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <string>
#include <utility>

Go to the source code of this file.

Functions

static const chartoString (MIToken::TokenKind TokenKind)
 
static const charprintImplicitRegisterFlag (const MachineOperand &MO)
 
static std::string getRegisterName (const TargetRegisterInfo *TRI, unsigned Reg)
 
static bool isImplicitOperandIn (const MachineOperand &ImplicitOperand, ArrayRef< ParsedMachineOperand > Operands)
 Return true if the parsed machine operands contain a given machine operand. More...
 
static void initSlots2BasicBlocks (const Function &F, DenseMap< unsigned, const BasicBlock *> &Slots2BasicBlocks)
 
static const BasicBlockgetIRBlockFromSlot (unsigned Slot, const DenseMap< unsigned, const BasicBlock *> &Slots2BasicBlocks)
 
static void mapValueToSlot (const Value *V, ModuleSlotTracker &MST, DenseMap< unsigned, const Value *> &Slots2Values)
 
static void initSlots2Values (const Function &F, DenseMap< unsigned, const Value *> &Slots2Values)
 Creates the mapping from slot numbers to function's unnamed IR values. More...
 

Function Documentation

◆ getIRBlockFromSlot()

static const BasicBlock* getIRBlockFromSlot ( unsigned  Slot,
const DenseMap< unsigned, const BasicBlock *> &  Slots2BasicBlocks 
)
static

◆ getRegisterName()

static std::string getRegisterName ( const TargetRegisterInfo TRI,
unsigned  Reg 
)
static

◆ initSlots2BasicBlocks()

static void initSlots2BasicBlocks ( const Function F,
DenseMap< unsigned, const BasicBlock *> &  Slots2BasicBlocks 
)
static

◆ initSlots2Values()

static void initSlots2Values ( const Function F,
DenseMap< unsigned, const Value *> &  Slots2Values 
)
static

◆ isImplicitOperandIn()

static bool isImplicitOperandIn ( const MachineOperand ImplicitOperand,
ArrayRef< ParsedMachineOperand >  Operands 
)
static

Return true if the parsed machine operands contain a given machine operand.

Definition at line 884 of file MIParser.cpp.

References llvm::Acquire, llvm::AcquireRelease, llvm::MachineFunction::addFrameInst(), llvm::MachineFunction::allocateRegisterMask(), llvm::lltok::APSInt, AS, assert(), llvm::ArrayRef< T >::back(), llvm::CmpInst::BAD_FCMP_PREDICATE, llvm::CmpInst::BAD_ICMP_PREDICATE, C, llvm::StringSwitch< T, R >::Case(), llvm::MIToken::colon, llvm::MIToken::comma, llvm::MIToken::ConstantPoolItem, llvm::PerFunctionMIParsingState::ConstantPoolSlots, Context, llvm::MachineOperand::CreateBA(), llvm::MachineOperand::CreateCFIIndex(), llvm::MachineOperand::CreateCImm(), llvm::MachineOperand::CreateCPI(), llvm::MCCFIInstruction::createDefCfa(), llvm::MCCFIInstruction::createDefCfaOffset(), llvm::MCCFIInstruction::createDefCfaRegister(), llvm::MachineOperand::CreateES(), llvm::MachineFunction::createExternalSymbolName(), llvm::MachineOperand::CreateFI(), llvm::MachineOperand::CreateFPImm(), llvm::MachineOperand::CreateGA(), llvm::MachineOperand::CreateImm(), llvm::MachineOperand::CreateIntrinsicID(), llvm::MachineOperand::CreateJTI(), llvm::MachineOperand::CreateMBB(), llvm::MachineOperand::CreateMetadata(), llvm::MCCFIInstruction::createOffset(), llvm::MachineOperand::CreatePredicate(), llvm::MachineOperand::CreateReg(), llvm::MachineOperand::CreateRegLiveOut(), llvm::MachineOperand::CreateRegMask(), llvm::MCCFIInstruction::createRestore(), llvm::MCCFIInstruction::createSameValue(), llvm::MachineOperand::CreateTargetIndex(), llvm::VRegInfo::D, llvm::RegState::Dead, llvm::RegState::Debug, llvm::StringSwitch< T, R >::Default(), llvm::RegState::Define, llvm::MIToken::dot, llvm::dyn_cast(), E, llvm::RegState::EarlyClobber, llvm::ArrayRef< T >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::StringMap< ValueTy, AllocatorTy >::end(), error, llvm::MIToken::Error, llvm::MIToken::exclaim, llvm::VRegInfo::Explicit, llvm::MIToken::ExternalSymbol, F(), llvm::CmpInst::FCMP_FALSE, llvm::CmpInst::FCMP_OEQ, llvm::CmpInst::FCMP_OGE, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLE, llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ONE, llvm::CmpInst::FCMP_ORD, llvm::CmpInst::FCMP_TRUE, llvm::CmpInst::FCMP_UEQ, llvm::CmpInst::FCMP_UGE, llvm::CmpInst::FCMP_UGT, llvm::CmpInst::FCMP_ULE, llvm::CmpInst::FCMP_ULT, llvm::CmpInst::FCMP_UNE, llvm::CmpInst::FCMP_UNO, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::StringMap< ValueTy, AllocatorTy >::find(), llvm::MIToken::FixedStackObject, llvm::PerFunctionMIParsingState::FixedStackObjectSlots, llvm::MIToken::FloatingPointLiteral, llvm::MachineInstr::FrameSetup, llvm::VRegInfo::GENERIC, llvm::BlockAddress::get(), llvm::MDNode::get(), llvm::APInt::getBitWidth(), llvm::SMDiagnostic::getColumnNo(), llvm::PseudoSourceValueManager::getConstantPool(), llvm::Function::getContext(), llvm::Module::getDataLayout(), llvm::PseudoSourceValueManager::getExternalSymbolCallEntry(), llvm::PseudoSourceValueManager::getFixedStack(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::PseudoSourceValueManager::getGlobalValueCallEntry(), llvm::PseudoSourceValueManager::getGOT(), llvm::MCInstrDesc::getImplicitDefs(), llvm::MCInstrDesc::getImplicitUses(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::TargetMachine::getIntrinsicInfo(), llvm::PseudoSourceValueManager::getJumpTable(), llvm::MachineFunction::getMachineMemOperand(), llvm::SMDiagnostic::getMessage(), llvm::MachineBasicBlock::getName(), llvm::Module::getNamedValue(), llvm::MCRegisterInfo::getNumSubRegIndices(), llvm::MachineFrameInfo::getObjectAllocation(), llvm::dwarf::getOperationEncoding(), llvm::LLVMContext::getOrInsertSyncScopeID(), llvm::GlobalValue::getParent(), llvm::DataLayout::getPointerSizeInBits(), llvm::MachineFunction::getPSVManager(), llvm::TargetRegisterInfo::getRegClassName(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), getRegisterName(), llvm::PseudoSourceValueManager::getStack(), llvm::TargetRegisterInfo::getSubRegIndexName(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::Value::getType(), llvm::MachineRegisterInfo::getType(), llvm::Function::getValueSymbolTable(), llvm::PerFunctionMIParsingState::getVRegInfo(), llvm::APInt::getZExtValue(), llvm::MIToken::GlobalValue, llvm::SlotMapping::GlobalValues, llvm::MIToken::greater, llvm::MIToken::HexLiteral, I, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLE, llvm::CmpInst::ICMP_SLT, llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULE, llvm::CmpInst::ICMP_ULT, llvm::object::Identifier, llvm::MIToken::Identifier, llvm::RegState::Implicit, llvm::RegState::ImplicitDefine, llvm::MCInstrDesc::ImplicitDefs, llvm::MCInstrDesc::ImplicitUses, llvm::MIToken::IntegerLiteral, llvm::MIToken::IntegerType, llvm::RegState::InternalRead, llvm::MIToken::IRBlock, llvm::PerFunctionMIParsingState::IRSlots, llvm::MIToken::IRValue, llvm::MCInstrDesc::isCall(), llvm::CmpInst::isFPPredicate(), llvm::MachineOperand::isIdenticalTo(), llvm::CmpInst::isIntPredicate(), llvm::Type::isPointerTy(), llvm::MachineOperand::isReg(), llvm::LLT::isValid(), llvm::TargetRegisterInfo::isVirtualRegister(), llvm::MIToken::JumpTableIndex, llvm::PerFunctionMIParsingState::JumpTableSlots, llvm::RegState::Kill, llvm::VRegInfo::Kind, Kind, llvm::MIToken::kw_align, llvm::MIToken::kw_blockaddress, llvm::MIToken::kw_call_entry, llvm::MIToken::kw_cfi_def_cfa, llvm::MIToken::kw_cfi_def_cfa_offset, llvm::MIToken::kw_cfi_def_cfa_register, llvm::MIToken::kw_cfi_offset, llvm::MIToken::kw_cfi_restore, llvm::MIToken::kw_cfi_same_value, llvm::MIToken::kw_constant_pool, llvm::MIToken::kw_dead, llvm::MIToken::kw_debug_use, llvm::MIToken::kw_def, llvm::MIToken::kw_dereferenceable, llvm::MIToken::kw_double, llvm::MIToken::kw_early_clobber, llvm::MIToken::kw_float, llvm::MIToken::kw_floatpred, llvm::MIToken::kw_fp128, llvm::MIToken::kw_frame_setup, llvm::MIToken::kw_got, llvm::MIToken::kw_half, llvm::MIToken::kw_implicit, llvm::MIToken::kw_implicit_define, llvm::MIToken::kw_internal, llvm::MIToken::kw_intpred, llvm::MIToken::kw_intrinsic, llvm::MIToken::kw_invariant, llvm::MIToken::kw_jump_table, llvm::MIToken::kw_killed, llvm::MIToken::kw_liveout, llvm::MIToken::kw_non_temporal, llvm::MIToken::kw_ppc_fp128, llvm::MIToken::kw_stack, llvm::MIToken::kw_target_flags, llvm::MIToken::kw_target_index, llvm::MIToken::kw_tied_def, llvm::MIToken::kw_undef, llvm::MIToken::kw_volatile, llvm::MIToken::kw_x86_fp80, llvm::MIToken::less, llvm_unreachable, llvm::ValueSymbolTable::lookup(), llvm::Function::lookupIntrinsicID(), llvm::TargetIntrinsicInfo::lookupName(), llvm::MIToken::lparen, llvm::MIToken::MachineBasicBlock, llvm::MIToken::MachineBasicBlockLabel, llvm::BitmaskEnumDetail::Mask(), llvm::max(), llvm::PerFunctionMIParsingState::MBBSlots, llvm::MIToken::md_alias_scope, llvm::MIToken::md_diexpr, llvm::MIToken::md_noalias, llvm::MIToken::md_range, llvm::MIToken::md_tbaa, llvm::SlotMapping::MetadataNodes, llvm::PerFunctionMIParsingState::MF, llvm::MIToken::minus, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, llvm::MachineMemOperand::MONone, llvm::MachineMemOperand::MONonTemporal, llvm::Monotonic, llvm::MachineMemOperand::MOStore, llvm::MachineMemOperand::MOVolatile, MRI, llvm::MIToken::NamedGlobalValue, llvm::MIToken::NamedIRBlock, llvm::MIToken::NamedIRValue, llvm::MIToken::NamedRegister, llvm::PerFunctionMIParsingState::Names2RegBanks, llvm::PerFunctionMIParsingState::Names2RegClasses, llvm::AAMDNodes::NoAlias, llvm::VRegInfo::NORMAL, llvm::Intrinsic::not_intrinsic, llvm::NotAtomic, llvm::Number, llvm::parseConstantValue(), llvm::parseMBBReference(), llvm::parseMDNode(), llvm::MIToken::plus, llvm::LLT::pointer(), llvm::MIToken::PointerType, printImplicitRegisterFlag(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::MIToken::QuotedIRValue, llvm::VRegInfo::RC, llvm::VRegInfo::REGBANK, llvm::VRegInfo::RegBank, llvm::Release, llvm::MIToken::rparen, llvm::LLT::scalar(), llvm::MIToken::ScalarType, llvm::AAMDNodes::Scope, llvm::SequentiallyConsistent, llvm::MachineOperand::setOffset(), llvm::MachineOperand::setTargetFlags(), llvm::MachineRegisterInfo::setType(), llvm::StringRef::size(), llvm::ArrayRef< T >::size(), llvm::AMDGPU::HSAMD::Kernel::Arg::Key::Size, llvm::MIToken::StackObject, llvm::PerFunctionMIParsingState::StackObjectSlots, llvm::StringRef::str(), llvm::MIToken::StringConstant, SubReg, llvm::MIToken::SubRegisterIndex, llvm::ARMBuildAttrs::Symbol, llvm::SyncScope::System, llvm::AAMDNodes::TBAA, llvm::MachineInstr::tieOperands(), TII, llvm::RegState::Undef, llvm::MIToken::underscore, llvm::VRegInfo::UNKNOWN, llvm::Unordered, llvm::LLT::vector(), llvm::MIToken::VirtualRegister, and llvm::VRegInfo::VReg.

◆ mapValueToSlot()

static void mapValueToSlot ( const Value V,
ModuleSlotTracker MST,
DenseMap< unsigned, const Value *> &  Slots2Values 
)
static

◆ printImplicitRegisterFlag()

static const char* printImplicitRegisterFlag ( const MachineOperand MO)
static

◆ toString()

static const char* toString ( MIToken::TokenKind  TokenKind)
static

Definition at line 372 of file MIParser.cpp.

References llvm::MachineBasicBlock::addLiveIn(), llvm::MachineInstr::addOperand(), llvm::MachineBasicBlock::addSuccessor(), llvm::MachineFunction::allocateMemRefsArray(), assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::MachineInstr::BundledPred, llvm::MachineInstr::BundledSucc, llvm::MIToken::colon, llvm::MIToken::coloncolon, llvm::MIToken::comma, llvm::MachineOperand::CreateImm(), llvm::MachineFunction::CreateMachineBasicBlock(), llvm::MachineFunction::CreateMachineInstr(), llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::MachineBasicBlock::end(), llvm::MachineFunction::end(), llvm::MIToken::Eof, llvm::MIToken::equal, error, llvm::MIToken::exclaim, llvm::MCInstrInfo::get(), llvm::LaneBitmask::getAll(), llvm::MachineFunction::getFunction(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineFunction::getName(), llvm::BranchProbability::getRaw(), llvm::MachineFunction::getSubtarget(), llvm::Function::getValueSymbolTable(), llvm::guessSuccessors(), llvm::MIToken::HexLiteral, llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::MachineBasicBlock::insert(), llvm::MachineFunction::insert(), llvm::MIToken::IntegerLiteral, llvm::MIToken::IRBlock, llvm::MIToken::kw_address_taken, llvm::MIToken::kw_align, llvm::MIToken::kw_debug_location, llvm::MIToken::kw_landing_pad, llvm::MIToken::kw_liveins, llvm::MIToken::kw_successors, llvm::MIToken::lbrace, llvm::ValueSymbolTable::lookup(), llvm::MIToken::lparen, llvm::MIToken::MachineBasicBlock, llvm::MIToken::MachineBasicBlockLabel, llvm::BitmaskEnumDetail::Mask(), llvm::PerFunctionMIParsingState::MBBSlots, llvm::MIToken::md_diexpr, llvm::PerFunctionMIParsingState::MF, MI, llvm::MIToken::NamedRegister, llvm::MIToken::Newline, llvm::MachineBasicBlock::normalizeSuccProbs(), llvm::parseMBBReference(), llvm::parseMDNode(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::MIToken::rbrace, llvm::MIToken::rparen, llvm::MachineInstr::setFlag(), llvm::MachineInstr::setFlags(), llvm::MachineInstr::setMemRefs(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::MIToken::StackObject, llvm::toString(), and llvm::MIToken::VirtualRegister.