LLVM: lib/CodeGen/AsmPrinter/AsmPrinter.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "asm-printer"
Functions
STATISTIC (EmittedInsts, "Number of machine instrs printed")
callgraph::LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE ()
static bool canBeHidden (const GlobalValue *GV, const MCAsmInfo &MAI)
static void emitComments (const MachineInstr &MI, const MCSubtargetInfo *STI, raw_ostream &CommentOS)
emitComments - Pretty-print comments for instructions.
static void emitKill (const MachineInstr *MI, AsmPrinter &AP)
static void emitFakeUse (const MachineInstr *MI, AsmPrinter &AP)
static bool emitDebugValueComment (const MachineInstr *MI, AsmPrinter &AP)
emitDebugValueComment - This method handles the target-independent form of DBG_VALUE, returning true if it was able to do so.
static bool emitDebugLabelComment (const MachineInstr *MI, AsmPrinter &AP)
This method handles the target-independent form of DBG_LABEL, returning true if it was able to do so.
static uint32_t getBBAddrMapMetadata (const MachineBasicBlock &MBB)
Returns the BB metadata to be emitted in the SHT_LLVM_BB_ADDR_MAP section for a given basic block.
static llvm::object::BBAddrMap::Features getBBAddrMapFeature (const MachineFunction &MF, int NumMBBSectionRanges, bool HasCalls)
static ConstantInt * extractNumericCGTypeId (const Function &F)
Extracts a generalized numeric type identifier of a Function's type from type metadata.
static bool needFuncLabels (const MachineFunction &MF, const AsmPrinter &Asm)
Returns true if function begin and end labels should be emitted.
static StringRef getMIMnemonic (const MachineInstr &MI, MCStreamer &Streamer)
static unsigned getNumGlobalVariableUses (const Constant *C, bool &HasNonGlobalUsers)
Compute the number of Global Variables that uses a Constant.
static bool isGOTEquivalentCandidate (const GlobalVariable *GV, unsigned &NumGOTEquivUsers, bool &HasNonGlobalUsers)
Only consider global GOT equivalents if at least one user is a cstexpr inside an initializer of another global variables.
static uint64_t globalSize (const llvm::GlobalVariable &G)
static bool shouldTagGlobal (const llvm::GlobalVariable &G)
static void tagGlobalDefinition (Module &M, GlobalVariable *G)
static void removeMemtagFromGlobal (GlobalVariable &G)
static void emitGlobalConstantImpl (const DataLayout &DL, const Constant *C, AsmPrinter &AP, const Constant *BaseCV=nullptr, uint64_t Offset=0, AsmPrinter::AliasMapTy *AliasList=nullptr)
static void emitGlobalConstantFP (const ConstantFP *CFP, AsmPrinter &AP)
static void emitGlobalConstantFP (APFloat APF, Type *ET, AsmPrinter &AP)
static int isRepeatedByteSequence (const ConstantDataSequential *V)
isRepeatedByteSequence - Determine whether the given value is composed of a repeated sequence of identical bytes and return the byte value.
static int isRepeatedByteSequence (const Value *V, const DataLayout &DL)
isRepeatedByteSequence - Determine whether the given value is composed of a repeated sequence of identical bytes and return the byte value.
static void emitGlobalAliasInline (AsmPrinter &AP, uint64_t Offset, AsmPrinter::AliasMapTy *AliasList)
static void emitGlobalConstantDataSequential (const DataLayout &DL, const ConstantDataSequential *CDS, AsmPrinter &AP, AsmPrinter::AliasMapTy *AliasList)
static void emitGlobalConstantArray (const DataLayout &DL, const ConstantArray *CA, AsmPrinter &AP, const Constant *BaseCV, uint64_t Offset, AsmPrinter::AliasMapTy *AliasList)
static void emitGlobalConstantLargeInt (const ConstantInt *CI, AsmPrinter &AP)
static void emitGlobalConstantVector (const DataLayout &DL, const Constant *CV, AsmPrinter &AP, AsmPrinter::AliasMapTy *AliasList)
static void emitGlobalConstantStruct (const DataLayout &DL, const ConstantStruct *CS, AsmPrinter &AP, const Constant *BaseCV, uint64_t Offset, AsmPrinter::AliasMapTy *AliasList)
static void handleIndirectSymViaGOTPCRel (AsmPrinter &AP, const MCExpr **ME, const Constant *BaseCst, uint64_t Offset)
Transform a not absolute MCExpr containing a reference to a GOT equivalent global, by a target specific GOT pc relative access to the final symbol.
static void PrintParentLoopComment (raw_ostream &OS, const MachineLoop *Loop, unsigned FunctionNumber)
PrintParentLoopComment - Print comments about parent loops of this one.
static void PrintChildLoopComment (raw_ostream &OS, const MachineLoop *Loop, unsigned FunctionNumber)
PrintChildLoopComment - Print comments about child loops within the loop for this basic block, with nesting.
static void emitBasicBlockLoopComments (const MachineBasicBlock &MBB, const MachineLoopInfo *LI, const AsmPrinter &AP)
emitBasicBlockLoopComments - Pretty-print comments for basic blocks.
Variables
static cl::bits< PGOMapFeaturesEnum > PgoAnalysisMapFeatures ("pgo-analysis-map", cl::Hidden, cl::CommaSeparated, cl::values(clEnumValN(PGOMapFeaturesEnum::None, "none", "Disable all options"), clEnumValN(PGOMapFeaturesEnum::FuncEntryCount, "func-entry-count", "Function Entry Count"), clEnumValN(PGOMapFeaturesEnum::BBFreq, "bb-freq", "Basic Block Frequency"), clEnumValN(PGOMapFeaturesEnum::BrProb, "br-prob", "Branch Probability"), clEnumValN(PGOMapFeaturesEnum::All, "all", "Enable all options")), cl::desc("Enable extended information within the SHT_LLVM_BB_ADDR_MAP that is " "extracted from PGO related analysis."))
static cl::opt< bool > BBAddrMapSkipEmitBBEntries ("basic-block-address-map-skip-bb-entries", cl::desc("Skip emitting basic block entries in the SHT_LLVM_BB_ADDR_MAP " "section. It's used to save binary size when BB entries are " "unnecessary for some PGOAnalysisMap features."), cl::Hidden, cl::init(false))
static cl::opt< bool > EmitJumpTableSizesSection ("emit-jump-table-sizes-section", cl::desc("Emit a section containing jump table addresses and sizes"), cl::Hidden, cl::init(false))
static cl::opt< bool > PrintLatency ("asm-print-latency", cl::desc("Print instruction latencies as verbose asm comments"), cl::Hidden, cl::init(false))
cl::opt< bool > EmitBBHash

DEBUG_TYPE

#define DEBUG_TYPE "asm-printer"

PGOMapFeaturesEnum

enum class PGOMapFeaturesEnum strong
Enumerator
None
FuncEntryCount
BBFreq
BrProb
All

Definition at line 148 of file AsmPrinter.cpp.

canBeHidden()

emitBasicBlockLoopComments()

emitBasicBlockLoopComments - Pretty-print comments for basic blocks.

Definition at line 4466 of file AsmPrinter.cpp.

References assert(), llvm::AsmPrinter::getFunctionNumber(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::LoopBase< BlockT, LoopT >::getLoopDepth(), llvm::LoopInfoBase< BlockT, LoopT >::getLoopFor(), llvm::BasicBlock::getNumber(), llvm::LoopBase< BlockT, LoopT >::getParentLoop(), llvm::raw_ostream::indent(), llvm::LoopBase< BlockT, LoopT >::isInnermost(), MBB, llvm::AsmPrinter::OutStreamer, PrintChildLoopComment(), and PrintParentLoopComment().

Referenced by llvm::AsmPrinter::emitBasicBlockStart().

emitComments()

emitDebugLabelComment()

emitDebugValueComment()

emitDebugValueComment - This method handles the target-independent form of DBG_VALUE, returning true if it was able to do so.

A false return means the target will need to handle MI in EmitInstruction.

Definition at line 1203 of file AsmPrinter.cpp.

References llvm::APFloat::convert(), llvm::APFloat::convertToDouble(), llvm::DIExpression::convertToNonVariadicExpression(), llvm::dyn_cast(), llvm::DIExpression::expr_ops(), llvm::StackOffset::getFixed(), llvm::TargetFrameLowering::getFrameIndexReference(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::DIExpression::getNumElements(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::APFloatBase::IEEEdouble(), llvm::Type::isBFloatTy(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isHalfTy(), llvm_unreachable, llvm::AsmPrinter::MF, MI, llvm::MachineOperand::MO_CImmediate, llvm::MachineOperand::MO_FPImmediate, llvm::MachineOperand::MO_FrameIndex, llvm::MachineOperand::MO_Immediate, llvm::MachineOperand::MO_Register, llvm::MachineOperand::MO_TargetIndex, llvm::Offset, llvm::dwarf::OperationEncodingString(), llvm::AsmPrinter::OutStreamer, llvm::printReg(), Reg, and llvm::APFloatBase::rmNearestTiesToEven.

Referenced by llvm::AsmPrinter::emitFunctionBody().

emitFakeUse()

emitGlobalAliasInline()

emitGlobalConstantArray()

Definition at line 3929 of file AsmPrinter.cpp.

References DL, E(), emitGlobalConstantImpl(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::ConstantArray::getType(), llvm::Value::getType(), I, isRepeatedByteSequence(), llvm::Offset, and llvm::AsmPrinter::OutStreamer.

Referenced by emitGlobalConstantImpl().

emitGlobalConstantDataSequential()

Definition at line 3886 of file AsmPrinter.cpp.

References assert(), DL, E(), emitGlobalAliasInline(), emitGlobalConstantFP(), llvm::format(), llvm::ConstantDataSequential::getAsString(), llvm::ConstantDataSequential::getElementAsAPFloat(), llvm::ConstantDataSequential::getElementAsInteger(), llvm::ConstantDataSequential::getElementByteSize(), llvm::ConstantDataSequential::getElementType(), llvm::ConstantDataSequential::getNumElements(), llvm::Value::getType(), I, llvm::isa(), isRepeatedByteSequence(), llvm::ConstantDataSequential::isString(), llvm::AsmPrinter::isVerbose(), llvm::AsmPrinter::OutStreamer, and Size.

Referenced by emitGlobalConstantImpl().

emitGlobalConstantFP() [1/2]

Definition at line 4020 of file AsmPrinter.cpp.

References assert(), llvm::APFloat::bitcastToAPInt(), DL, llvm::APInt::getBitWidth(), llvm::AsmPrinter::getDataLayout(), llvm::APInt::getNumWords(), llvm::APInt::getRawData(), llvm::DataLayout::isBigEndian(), llvm::Type::isPPC_FP128Ty(), llvm::AsmPrinter::isVerbose(), llvm::AsmPrinter::OutStreamer, llvm::Type::print(), and llvm::APFloat::toString().

emitGlobalConstantFP() [2/2]

emitGlobalConstantImpl()

Definition at line 4211 of file AsmPrinter.cpp.

References assert(), llvm::ConstantFoldConstant(), DL, llvm::dyn_cast(), emitGlobalAliasInline(), emitGlobalConstantArray(), emitGlobalConstantDataSequential(), emitGlobalConstantFP(), emitGlobalConstantImpl(), emitGlobalConstantLargeInt(), emitGlobalConstantStruct(), emitGlobalConstantVector(), llvm::format(), llvm::StructLayout::getElementOffset(), llvm::StructType::getNumElements(), llvm::AsmPrinter::getObjFileLowering(), llvm::TargetMachine::getTargetTriple(), llvm::Value::getType(), handleIndirectSymViaGOTPCRel(), llvm::Value::hasOneUse(), llvm::isa(), llvm::Triple::isOSBinFormatXCOFF(), llvm::AsmPrinter::isVerbose(), llvm::AsmPrinter::lowerConstant(), llvm::Offset, llvm::AsmPrinter::OutStreamer, Size, llvm::TargetLoweringObjectFile::supportIndirectSymViaGOTPCRel(), llvm::AsmPrinter::TM, and llvm::Value::user_back().

Referenced by llvm::AsmPrinter::emitGlobalConstant(), emitGlobalConstantArray(), emitGlobalConstantImpl(), emitGlobalConstantStruct(), and emitGlobalConstantVector().

emitGlobalConstantLargeInt()

Definition at line 4068 of file AsmPrinter.cpp.

References llvm::alignTo(), assert(), llvm::BitWidth, DL, llvm::ConstantInt::getBitWidth(), llvm::AsmPrinter::getDataLayout(), llvm::APInt::getRawData(), llvm::Value::getType(), llvm::DataLayout::getTypeStoreSize(), llvm::ConstantInt::getValue(), llvm::APInt::lshrInPlace(), llvm::AsmPrinter::OutStreamer, and Size.

Referenced by emitGlobalConstantImpl(), and emitGlobalConstantVector().

emitGlobalConstantStruct()

Definition at line 3989 of file AsmPrinter.cpp.

References assert(), DL, E(), emitGlobalConstantImpl(), llvm::StructLayout::getElementOffset(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::StructLayout::getSizeInBytes(), llvm::ConstantStruct::getType(), I, llvm::Offset, llvm::AsmPrinter::OutStreamer, and Size.

Referenced by emitGlobalConstantImpl().

emitGlobalConstantVector()

Definition at line 3951 of file AsmPrinter.cpp.

References llvm::cast(), llvm::ConstantFoldConstant(), DL, llvm::dyn_cast_or_null(), E(), emitGlobalAliasInline(), emitGlobalConstantImpl(), emitGlobalConstantLargeInt(), llvm::IntegerType::get(), llvm::Constant::getAggregateElement(), llvm::ConstantExpr::getBitCast(), llvm::Value::getContext(), llvm::Value::getType(), I, llvm::AsmPrinter::OutStreamer, llvm::report_fatal_error(), and Size.

Referenced by emitGlobalConstantImpl().

emitKill()

extractNumericCGTypeId()

getBBAddrMapFeature()

Definition at line 1413 of file AsmPrinter.cpp.

References All, AllFeatures, BBAddrMapSkipEmitBBEntries, BBFreq, BrProb, EmitBBHash, llvm::LLVMContext::emitError(), FuncEntryCount, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::hasBBSections(), HasCalls, None, PgoAnalysisMapFeatures, and llvm::popcount().

Referenced by llvm::AsmPrinter::emitBBAddrMapSection().

getBBAddrMapMetadata()

getMIMnemonic()

getNumGlobalVariableUses()

globalSize()

handleIndirectSymViaGOTPCRel()

Transform a not absolute MCExpr containing a reference to a GOT equivalent global, by a target specific GOT pc relative access to the final symbol.

Definition at line 4129 of file AsmPrinter.cpp.

References llvm::dyn_cast(), llvm::dyn_cast_or_null(), llvm::MCValue::getAddSym(), llvm::MCValue::getConstant(), llvm::TargetLoweringObjectFile::getIndirectSymViaGOTPCRel(), llvm::AsmPrinter::getObjFileLowering(), llvm::User::getOperand(), llvm::MCValue::getSubSym(), llvm::AsmPrinter::getSymbol(), llvm::AsmPrinter::GlobalGOTEquivs, llvm::MCValue::isAbsolute(), llvm::AsmPrinter::MMI, llvm::Offset, llvm::AsmPrinter::OutStreamer, and llvm::TargetLoweringObjectFile::supportGOTPCRelWithOffset().

Referenced by emitGlobalConstantImpl().

isGOTEquivalentCandidate()

Only consider global GOT equivalents if at least one user is a cstexpr inside an initializer of another global variables.

Also, don't handle cstexpr inside instructions. During global variable emission, candidates are skipped and are emitted later in case at least one cstexpr isn't replaced by a PC relative GOT entry access.

Definition at line 2349 of file AsmPrinter.cpp.

References llvm::dyn_cast(), getNumGlobalVariableUses(), llvm::User::getOperand(), llvm::GlobalValue::hasGlobalUnnamedAddr(), llvm::GlobalVariable::hasInitializer(), llvm::isa(), llvm::GlobalVariable::isConstant(), llvm::GlobalValue::isDiscardableIfUnused(), and llvm::Value::users().

Referenced by llvm::AsmPrinter::computeGlobalGOTEquivs().

isRepeatedByteSequence() [1/2]

isRepeatedByteSequence() [2/2]

needFuncLabels()

PrintChildLoopComment()

PrintParentLoopComment()

removeMemtagFromGlobal()

shouldTagGlobal()

STATISTIC()

STATISTIC ( EmittedInsts ,
"Number of machine instrs printed" )

tagGlobalDefinition()

BBAddrMapSkipEmitBBEntries

cl::opt< bool > BBAddrMapSkipEmitBBEntries("basic-block-address-map-skip-bb-entries", cl::desc("Skip emitting basic block entries in the SHT_LLVM_BB_ADDR_MAP " "section. It's used to save binary size when BB entries are " "unnecessary for some PGOAnalysisMap features."), cl::Hidden, cl::init(false)) ( "basic-block-address-map-skip-bb-entries" , cl::desc("Skip emitting basic block entries in the SHT_LLVM_BB_ADDR_MAP " "section. It's used to save binary size when BB entries are " "unnecessary for some PGOAnalysisMap features.") , cl::Hidden , cl::init(false) ) static

EmitBBHash

EmitJumpTableSizesSection

cl::opt< bool > EmitJumpTableSizesSection("emit-jump-table-sizes-section", cl::desc("Emit a section containing jump table addresses and sizes"), cl::Hidden, cl::init(false)) ( "emit-jump-table-sizes-section" , cl::desc("Emit a section containing jump table addresses and sizes") , cl::Hidden , cl::init(false) ) static

PgoAnalysisMapFeatures

cl::bits< PGOMapFeaturesEnum > PgoAnalysisMapFeatures("pgo-analysis-map", cl::Hidden, cl::CommaSeparated, cl::values( clEnumValN(PGOMapFeaturesEnum::None, "none", "Disable all options"), clEnumValN(PGOMapFeaturesEnum::FuncEntryCount, "func-entry-count", "Function Entry Count"), clEnumValN(PGOMapFeaturesEnum::BBFreq, "bb-freq", "Basic Block Frequency"), clEnumValN(PGOMapFeaturesEnum::BrProb, "br-prob", "Branch Probability"), clEnumValN(PGOMapFeaturesEnum::All, "all", "Enable all options")), cl::desc( "Enable extended information within the SHT_LLVM_BB_ADDR_MAP that is " "extracted from PGO related analysis.")) ( "pgo-analysis-map" , cl::Hidden , cl::CommaSeparated , cl::values( clEnumValN(PGOMapFeaturesEnum::None, "none", "Disable all options"), clEnumValN(PGOMapFeaturesEnum::FuncEntryCount, "func-entry-count", "Function Entry Count"), clEnumValN(PGOMapFeaturesEnum::BBFreq, "bb-freq", "Basic Block Frequency"), clEnumValN(PGOMapFeaturesEnum::BrProb, "br-prob", "Branch Probability"), clEnumValN(PGOMapFeaturesEnum::All, "all", "Enable all options")) , cl::desc( "Enable extended information within the SHT_LLVM_BB_ADDR_MAP that is " "extracted from PGO related analysis.") ) static

PrintLatency

cl::opt< bool > PrintLatency("asm-print-latency", cl::desc("Print instruction latencies as verbose asm comments"), cl::Hidden, cl::init(false)) ( "asm-print-latency" , cl::desc("Print instruction latencies as verbose asm comments") , cl::Hidden , cl::init(false) ) static