62#define DEBUG_TYPE "asm-printer"
73 for (
MVT T : {MVT::i32, MVT::i64, MVT::f32, MVT::f64, MVT::v16i8, MVT::v8i16,
74 MVT::v4i32, MVT::v2i64, MVT::v4f32, MVT::v2f64, MVT::v8f16})
75 if (
TRI->isTypeLegalForClass(*TRC,
T))
77 LLVM_DEBUG(
errs() <<
"Unknown type for register number: " << RegNo);
85 "Unlowered physical register encountered during assembly printing");
86 assert(!MFI->isVRegStackified(RegNo));
87 unsigned WAReg = MFI->getWAReg(RegNo);
89 return '$' +
utostr(WAReg);
114 if (Name.front() ==
'"' && Name.back() ==
'"')
115 Name = Name.substr(1, Name.size() - 2);
116 return Name.starts_with(
"__invoke_");
148 std::string Ret =
"invoke_";
171 EM =
TM.getExceptionModel();
172 const bool EnableEmEH =
176 InvokeDetected =
true;
179 "Emscripten EH/SjLj does not support multivalue returns: " +
180 std::string(
F->getName()) +
": " +
197 "' cannot have import attribute");
202 "imported global '" + GV->
getName() +
203 "' must be in a wasm variable address space");
211 Sym->setExportName(
OutContext.allocateString(Name));
220 if (!Sym->getType()) {
228 WasmTM.getTargetCPU(), WasmTM.getTargetFeatureString(),
229 WasmTM.getTargetABIName(*GV->
getParent()));
244 Sym->setImportModule(
OutContext.allocateString(ImportModule));
250 Sym->setImportName(
OutContext.allocateString(ImportName));
261 Sym->setExportName(
OutContext.allocateString(ExportName));
273 if (WasmSym->getType())
282 if (Name ==
"__stack_pointer" || Name ==
"__tls_base" ||
283 Name ==
"__memory_base" || Name ==
"__table_base" ||
284 Name ==
"__tls_size" || Name ==
"__tls_align") {
285 bool Mutable = Name ==
"__stack_pointer" || Name ==
"__tls_base";
294 if (Name.starts_with(
"GCC_except_table")) {
301 if (Name ==
"__cpp_exception" || Name ==
"__c_longjmp") {
303 WasmSym->setExternal(
true);
313 }
else if (Name ==
"__wasm_get_stack_pointer" ||
314 Name ==
"__wasm_get_tls_base") {
317 }
else if (Name ==
"__wasm_set_stack_pointer" ||
318 Name ==
"__wasm_set_tls_base") {
325 auto Signature =
OutContext.createWasmSignature();
326 Signature->Returns = std::move(Returns);
327 Signature->Params = std::move(Params);
328 WasmSym->setSignature(Signature);
334 std::optional<wasm::WasmSymbolType> WasmTy = Sym->
getType();
354 if (signaturesEmitted)
356 signaturesEmitted =
true;
365 if (WasmSym->isFunction()) {
376 auto Sym =
static_cast<MCSymbolWasm *
>(It.getValue().Symbol);
377 if (Sym && !Sym->isDefined())
395 if (!Sym->isFunctionTable())
403 assert(!Sym->isDefined());
415 for (
const auto &
F : M) {
431 bool InvokeDetected =
false;
438 if (InvokeDetected && !InvokeSymbols.
insert(Sym).second)
442 if (!Sym->getSignature()) {
443 Sym->setSignature(Signature);
448 if (
F.hasFnAttribute(
"wasm-import-module")) {
450 F.getFnAttribute(
"wasm-import-module").getValueAsString();
451 Sym->setImportModule(
OutContext.allocateString(Name));
454 if (
F.hasFnAttribute(
"wasm-import-name")) {
460 :
F.getFnAttribute(
"wasm-import-name").getValueAsString();
461 Sym->setImportName(
OutContext.allocateString(Name));
465 if (
F.hasFnAttribute(
"wasm-export-name")) {
467 StringRef Name =
F.getFnAttribute(
"wasm-export-name").getValueAsString();
468 Sym->setExportName(
OutContext.allocateString(Name));
486 for (
const auto &
F : M) {
487 if (!
F.isIntrinsic() &&
F.hasAddressTaken()) {
495 for (
const auto &
G : M.globals()) {
496 if (!
G.hasInitializer() &&
G.hasExternalLinkage() &&
498 G.getValueType()->isSized()) {
499 uint16_t
Size =
G.getGlobalSize(M.getDataLayout());
505 if (
const NamedMDNode *Named = M.getNamedMetadata(
"wasm.custom_sections")) {
506 for (
const Metadata *MD : Named->operands()) {
508 if (!Tuple || Tuple->getNumOperands() != 2)
512 if (!Name || !Contents)
516 std::string
SectionName = (
".custom_section." + Name->getString()).str();
534 for (
size_t I = 0, E =
Debug->getNumOperands();
I < E; ++
I) {
539 Language.consume_front(
"DW_LANG_");
540 if (SeenLanguages.
insert(Language).second)
546 if (
const NamedMDNode *Ident = M.getNamedMetadata(
"llvm.ident")) {
548 for (
size_t I = 0, E = Ident->getNumOperands();
I < E; ++
I) {
550 std::pair<StringRef, StringRef>
Field = S->getString().split(
"version");
553 if (SeenTools.
insert(Name).second)
558 int FieldCount = int(!Languages.
empty()) + int(!Tools.
empty());
559 if (FieldCount != 0) {
565 for (
auto &Producers : {std::make_pair(
"language", &Languages),
566 std::make_pair(
"processed-by", &Tools)}) {
567 if (Producers.second->empty())
569 OutStreamer->emitULEB128IntValue(strlen(Producers.first));
571 OutStreamer->emitULEB128IntValue(Producers.second->size());
572 for (
auto &Producer : *Producers.second) {
573 OutStreamer->emitULEB128IntValue(Producer.first.size());
575 OutStreamer->emitULEB128IntValue(Producer.second.size());
584 struct FeatureEntry {
591 auto EmitFeature = [&](std::string Feature) {
592 std::string MDKey = (
StringRef(
"wasm-feature-") + Feature).str();
593 Metadata *Policy = M.getModuleFlag(MDKey);
594 if (Policy ==
nullptr)
599 Entry.Name = Feature;
603 Entry.Prefix =
I->getZExtValue();
616 TM.getTargetCPU(),
TM.getTargetFeatureString(),
TM.getTargetABIName(M));
619 EmitFeature(KV.key());
622 EmitFeature(
"shared-mem");
626 if (Subtarget->hasAddr64()) {
632 if (EmittedFeatures.
size() == 0)
642 for (
auto &
F : EmittedFeatures) {
652 auto V = M.getNamedGlobal(
"llvm.global.annotations");
673 CustomSections[AnnotationString].push_back(Sym);
677 for (
const auto &[Name, Symbols] : CustomSections) {
683 for (
auto &Sym : Symbols) {
694 assert(
MF->getConstantPool()->getConstants().empty() &&
695 "WebAssembly disables constant pools");
716 if (
MDNode *Idx =
F.getMetadata(
"wasm.index")) {
717 assert(Idx->getNumOperands() == 1);
732 WebAssembly_MC::verifyInstructionPredicates(
MI->getOpcode(),
733 Subtarget->getFeatureBits());
735 switch (
MI->getOpcode()) {
736 case WebAssembly::ARGUMENT_i32:
737 case WebAssembly::ARGUMENT_i32_S:
738 case WebAssembly::ARGUMENT_i64:
739 case WebAssembly::ARGUMENT_i64_S:
740 case WebAssembly::ARGUMENT_f32:
741 case WebAssembly::ARGUMENT_f32_S:
742 case WebAssembly::ARGUMENT_f64:
743 case WebAssembly::ARGUMENT_f64_S:
744 case WebAssembly::ARGUMENT_v16i8:
745 case WebAssembly::ARGUMENT_v16i8_S:
746 case WebAssembly::ARGUMENT_v8i16:
747 case WebAssembly::ARGUMENT_v8i16_S:
748 case WebAssembly::ARGUMENT_v4i32:
749 case WebAssembly::ARGUMENT_v4i32_S:
750 case WebAssembly::ARGUMENT_v2i64:
751 case WebAssembly::ARGUMENT_v2i64_S:
752 case WebAssembly::ARGUMENT_v4f32:
753 case WebAssembly::ARGUMENT_v4f32_S:
754 case WebAssembly::ARGUMENT_v2f64:
755 case WebAssembly::ARGUMENT_v2f64_S:
756 case WebAssembly::ARGUMENT_v8f16:
757 case WebAssembly::ARGUMENT_v8f16_S:
758 case WebAssembly::ARGUMENT_externref:
759 case WebAssembly::ARGUMENT_externref_S:
760 case WebAssembly::ARGUMENT_funcref:
761 case WebAssembly::ARGUMENT_funcref_S:
762 case WebAssembly::ARGUMENT_exnref:
763 case WebAssembly::ARGUMENT_exnref_S:
767 case WebAssembly::FALLTHROUGH_RETURN: {
776 case WebAssembly::COMPILER_FENCE:
780 case WebAssembly::CATCH:
781 case WebAssembly::CATCH_S:
782 case WebAssembly::CATCH_REF:
783 case WebAssembly::CATCH_REF_S:
784 case WebAssembly::CATCH_ALL:
785 case WebAssembly::CATCH_ALL_S:
786 case WebAssembly::CATCH_ALL_REF:
787 case WebAssembly::CATCH_ALL_REF_S:
794 MCInstLowering.
lower(
MI, TmpInst);
803 const char *ExtraCode,
818 assert(
MI->getOpcode() == WebAssembly::INLINEASM);
841 const char *ExtraCode,
855 "WebAssembly Assembly Printer",
false,
false)
859LLVMInitializeWebAssemblyAsmPrinter() {
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Function Alias Analysis Results
static const Function * getParent(const Value *V)
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
#define LLVM_EXTERNAL_VISIBILITY
Module.h This file contains the declarations for the Module class.
This header defines various interfaces for pass management in LLVM.
This file declares the MachineConstantPool class which is an abstract constant pool to keep track of ...
Register const TargetRegisterInfo * TRI
This file implements a map that provides insertion order iteration.
OptimizedStructLayoutField Field
ModuleAnalysisManager MAM
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
This file defines the SmallSet class.
static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")
static std::string getEmscriptenInvokeSymbolName(wasm::WasmSignature *Sig)
static bool isEmscriptenInvokeName(StringRef Name)
static char getInvokeSig(wasm::ValType VT)
cl::opt< bool > WasmKeepRegisters
This file contains the declaration of the WebAssemblyMCAsmInfo class.
This file declares the class to lower WebAssembly MachineInstrs to their corresponding MCInst records...
This file provides WebAssembly-specific target descriptions.
This file declares WebAssembly-specific per-machine-function information.
This file contains the WebAssembly implementation of the WebAssemblyRegisterInfo class.
This file provides signature information for runtime libcalls.
This file registers the WebAssembly target.
This file declares the WebAssembly-specific subclass of TargetMachine.
This file declares WebAssembly-specific target streamer classes.
This file contains the declaration of the WebAssembly-specific type parsing utility functions.
This file contains the declaration of the WebAssembly-specific utility functions.
This file contains the entry points for global functions defined in the LLVM WebAssembly back-end.
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
This class is intended to be used as a driving class for all asm writers.
MCSymbol * getSymbol(const GlobalValue *GV) const
void EmitToStreamer(MCStreamer &S, const MCInst &Inst)
virtual void emitGlobalVariable(const GlobalVariable *GV)
Emit the specified global variable to the .s file.
TargetMachine & TM
Target machine description.
virtual void PrintSymbolOperand(const MachineOperand &MO, raw_ostream &OS)
Print the MachineOperand as a symbol.
MachineFunction * MF
The current machine function.
virtual const MCExpr * lowerConstant(const Constant *CV, const Constant *BaseCV=nullptr, uint64_t Offset=0)
Lower the specified LLVM Constant to an MCExpr.
virtual void emitFunctionBodyStart()
Targets can override this to emit stuff before the first basic block in the function.
bool doInitialization(Module &M) override
Set up the AsmPrinter when we are working on a new module.
virtual void emitLinkage(const GlobalValue *GV, MCSymbol *GVSym) const
This emits linkage information about GVSym based on GV, if this is supported by the target.
void printOffset(int64_t Offset, raw_ostream &OS) const
This is just convenient handler for printing offsets.
MCSymbol * getSymbolPreferLocal(const GlobalValue &GV) const
Similar to getSymbol() but preferred for references.
MCSymbol * CurrentFnSym
The symbol for the current function.
MachineModuleInfo * MMI
This is a pointer to the current MachineModuleInfo.
MCContext & OutContext
This is the context for the output file that we are streaming.
bool doFinalization(Module &M) override
Shut down the asmprinter.
void emitVisibility(MCSymbol *Sym, unsigned Visibility, bool IsDefinition=true) const
This emits visibility information about symbol, if this is supported by the target.
bool runOnMachineFunction(MachineFunction &MF) override
Emit the specified function out to the OutStreamer.
std::unique_ptr< MCStreamer > OutStreamer
This is the MCStreamer object for the file we are generating.
const MCAsmInfo & MAI
Target Asm Printer information.
virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS)
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant as...
bool isVerbose() const
Return true if assembly output should contain comments.
MCSymbol * GetExternalSymbolSymbol(const Twine &Sym) const
Return the MCSymbol for the specified ExternalSymbol.
@ Debug
Emit .debug_frame.
virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS)
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant.
LLVM_ABI StringRef getValueAsString() const
Return the attribute's value as a string.
ConstantArray - Constant Array Declarations.
Implements a dense probed hash-table based set.
bool isThreadLocal() const
If the value is "Thread Local", its value isn't shared by the threads.
VisibilityTypes getVisibility() const
LLVM_ABI bool isDeclaration() const
Return true if the primary definition of this global value is outside of the current translation unit...
unsigned getAddressSpace() const
Module * getParent()
Get the module that this global value is contained inside of...
LLVM_ABI const DataLayout & getDataLayout() const
Get the data layout of the module this global belongs to.
Type * getValueType() const
bool hasAttribute(Attribute::AttrKind Kind) const
Return true if the attribute exists.
bool hasInitializer() const
Definitions have initializers, declarations don't.
Attribute getAttribute(Attribute::AttrKind Kind) const
Return the attribute object.
bool isConstant() const
If the value is a global constant, its value is immutable throughout the runtime execution of the pro...
static LLVM_ABI const MCConstantExpr * create(int64_t Value, MCContext &Ctx, bool PrintInHex=false, unsigned SizeInBytes=0)
Instances of this class represent a single low-level machine instruction.
This represents a section on wasm.
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx, SMLoc Loc=SMLoc())
void setSignature(wasm::WasmSignature *Sig)
std::optional< wasm::WasmSymbolType > getType() const
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
LLVM_ABI void print(raw_ostream &OS, const MCAsmInfo *MAI) const
print - Print the value to the stream OS.
Target specific streamer interface.
LLVM_ABI StringRef getString() const
LLVM_ABI MCSymbol * getSymbol() const
Return the MCSymbol for this basic block.
Function & getFunction()
Return the LLVM function that this machine code represents.
Representation of each machine instruction.
MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation for Wasm targets.
SetVector< StringRef > MachineSymbolsUsed
MachineOperand class - Representation of each machine instruction operand.
MachineBasicBlock * getMBB() const
MachineOperandType getType() const
getType - Returns the MachineOperandType for this operand.
const char * getSymbolName() const
Register getReg() const
getReg - Returns the register number.
@ MO_Immediate
Immediate operand.
@ MO_GlobalAddress
Address of a global value.
@ MO_MachineBasicBlock
MachineBasicBlock reference.
@ MO_Register
Register operand.
@ MO_ExternalSymbol
Name of external global symbol.
int64_t getOffset() const
Return the offset from the symbol in this operand.
This class implements a map that also provides access to all stored values in a deterministic order.
A Module instance is used to store all the information related to an LLVM module.
LLVMContext & getContext() const
Get the global data context.
A set of analyses that are preserved following a run of a transformation pass.
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
Wrapper class representing virtual and physical registers.
constexpr bool isVirtual() const
Return true if the specified register number is in the virtual register namespace.
Represents a location in source code.
static SectionKind getMetadata()
SmallSet - This maintains a set of unique values, optimizing for the case when the set is small (less...
std::pair< const_iterator, bool > insert(const T &V)
insert - Insert an element into the set if it isn't already there.
reference emplace_back(ArgTypes &&... Args)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Represent a constant reference to a string, i.e.
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
LLVM_ABI const Value * stripPointerCasts() const
Strip off pointer casts, all-zero GEPs and address space casts.
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
void emitJumpTableInfo() override
Print assembly representations of the jump tables used by the current function to the current output ...
void EmitProducerInfo(Module &M)
void emitGlobalVariable(const GlobalVariable *GV) override
Emit the specified global variable to the .s file.
void EmitTargetFeatures(Module &M)
bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS) override
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant as...
const WebAssemblySubtarget & getSubtarget() const
WebAssemblyTargetStreamer * getTargetStreamer()
void emitInstruction(const MachineInstr *MI) override
Targets should implement this to emit instructions.
std::string regToString(const MachineOperand &MO)
void emitSymbolType(const MCSymbolWasm *Sym)
MCSymbol * getOrCreateWasmSymbol(StringRef Name)
void emitConstantPool() override
Print to the current output stream assembly representations of the constants in the constant pool MCP...
MVT getRegType(unsigned RegNo) const
void emitDecls(const Module &M)
void emitFunctionBodyStart() override
Targets can override this to emit stuff before the first basic block in the function.
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS) override
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant.
void EmitFunctionAttributes(Module &M)
void emitEndOfAsmFile(Module &M) override
This virtual method can be overridden by targets that want to emit something at the end of their file...
MCSymbolWasm * getMCSymbolForFunction(const Function *F, wasm::WasmSignature *Sig, bool &InvokeDetected)
This class is used to lower an MachineInstr into an MCInst.
void lower(const MachineInstr *MI, MCInst &OutMI) const
WebAssembly-specific streamer interface, to implement support WebAssembly-specific assembly directive...
virtual void emitFunctionType(const MCSymbolWasm *Sym)=0
.functype
virtual void emitLocal(ArrayRef< wasm::ValType > Types)=0
.local
virtual void emitTagType(const MCSymbolWasm *Sym)=0
.tagtype
virtual void emitExportName(const MCSymbolWasm *Sym, StringRef ExportName)=0
.export_name
virtual void emitGlobalType(const MCSymbolWasm *Sym)=0
.globaltype
virtual void emitImportModule(const MCSymbolWasm *Sym, StringRef ImportModule)=0
.import_module
virtual void emitTableType(const MCSymbolWasm *Sym)=0
.tabletype
virtual void emitImportName(const MCSymbolWasm *Sym, StringRef ImportName)=0
.import_name
virtual void emitIndIdx(const MCExpr *Value)=0
.indidx
std::pair< iterator, bool > insert(const ValueT &V)
This class implements an extremely fast bulk output stream that can only output to a stream.
LLVM_ABI StringRef LanguageString(unsigned Language)
Pass manager infrastructure for declaring and invalidating analyses.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
MCSymbolWasm * getOrCreateFunctionTableSymbol(MCContext &Ctx, const WebAssemblySubtarget *Subtarget)
Returns the __indirect_function_table, for use in call_indirect and in function bitcasts.
static const unsigned UnusedReg
void wasmSymbolSetType(MCSymbolWasm *Sym, const Type *GlobalVT, ArrayRef< MVT > VTs, bool Mutable)
Sets a Wasm Symbol Type.
cl::opt< bool > WasmEnableEmSjLj
std::string signatureToString(const wasm::WasmSignature *Sig)
void getLibcallSignature(const WebAssemblySubtarget &Subtarget, RTLIB::Libcall LC, SmallVectorImpl< wasm::ValType > &Rets, SmallVectorImpl< wasm::ValType > &Params)
bool isWasmVarAddressSpace(unsigned AS)
@ WASM_FEATURE_PREFIX_USED
@ WASM_FEATURE_PREFIX_DISALLOWED
@ WASM_SYMBOL_TYPE_GLOBAL
@ WASM_SYMBOL_TYPE_FUNCTION
This is an optimization pass for GlobalISel generic memory operations.
void computeSignatureVTs(const FunctionType *Ty, const Function *TargetFunc, const Function &ContextFunc, const TargetMachine &TM, SmallVectorImpl< MVT > &Params, SmallVectorImpl< MVT > &Results)
OuterAnalysisManagerProxy< ModuleAnalysisManager, MachineFunction > ModuleAnalysisManagerMachineFunctionProxy
Provide the ModuleAnalysisManager to Function proxy.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
LLVM_ABI bool getConstantStringInfo(const Value *V, StringRef &Str, bool TrimAtNul=true)
This function computes the length of a null-terminated C string pointed to by V.
std::string utostr(uint64_t X, bool isNeg=false)
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
LLVM_ABI void setupModuleAsmPrinter(Module &M, ModuleAnalysisManager &MAM, AsmPrinter &AsmPrinter)
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Target & getTheWebAssemblyTarget32()
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
Target & getTheWebAssemblyTarget64()
DWARFExpression::Operation Op
void valTypesFromMVTs(ArrayRef< MVT > In, SmallVectorImpl< wasm::ValType > &Out)
@ Emscripten
Emscripten JavaScript-based exception handling.
@ Default
Not specified; resolve to the target's default model.
LLVM_ABI void setupMachineFunctionAsmPrinter(MachineFunctionAnalysisManager &MFAM, MachineFunction &MF, AsmPrinter &AsmPrinter)
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
wasm::WasmSignature * signatureFromMVTs(MCContext &Ctx, const SmallVectorImpl< MVT > &Results, const SmallVectorImpl< MVT > &Params)
void computeLegalValueVTs(const WebAssemblyTargetLowering &TLI, LLVMContext &Ctx, const DataLayout &DL, Type *Ty, SmallVectorImpl< MVT > &ValueVTs)
@ MCSA_NoDeadStrip
.no_dead_strip (MachO)
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
MCRegisterClass TargetRegisterClass
RegisterAsmPrinter - Helper template for registering a target specific assembly printer,...
Used to provide key value pairs for feature and CPU bit flags.
SmallVector< ValType, 1 > Returns
SmallVector< ValType, 4 > Params