Module::Module(StringRef MID, LLVMContext &C) : Context(C), ValSymTab(std::make_unique<ValueSymbolTable>(-1)), ModuleID(std::string(MID)), SourceFileName(std::string(MID)), DL("") { Context.addModule(this); } 跟踪系列函数的部分 定义Function的迭代器,便于快速访问Module类中一系列函数。
function_ref<AAResults &(Function &)> &AARGetter, ImportedFunctionsInliningStatistics &ImportedFunctionsStats) { Function *Callee = CB.getCalledFunction(); Function *Caller = CB.getCaller(); AAResults &AAR = AARGetter(*
if(llvm::verifyFunction(*inz)) { std::cout << "verify function INZ failed!" << std::endl; } } 该实现提供了发现有关LLVM API的更多信息的机会。 llvm::FunctionType::get创建函数的签名,在本例中它是一个没有参数的 void 函数。llvm::Function::create调用在当前模块中创建函数 “INZ”。 上面RP...
AnalysisManagerT&AM,ExtraArgTs...ExtraArgs)=0;virtualvoidprintPipeline(raw_ostream&OS,function_ref<StringRef(StringRef)>MapClassName2PassName)=0;virtual StringRefname()const=0;/// Polymorphic method to to let a pass optionally
getName(), StringRef(), Unit, LineNo, CreateFunctionType(TheFunction->arg_size(), Unit), false /* internal linkage */, true /* definition */, ScopeLine, DINode::FlagPrototyped, false); TheFunction->setSubprogram(SP); 现在我们有了一个DISubProgram,它包含对函数的所有元数据的引用。 源...
Function *llvmFun = module->getFunction(StringRef(function->functionName)); functionPassManager->run(*llvmFun); } Function *llvmMainFun = module->getFunction(StringRef("main")); functionPassManager->run(*llvmMainFun); 具体而言,看一下 Bolt 编译器之前和之后的 LLVM IR 输出。可以在 repo 中...
(clang::SourceLocation, llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-16.0.0/bin/clang+++0x620eeb5)#7 0x000055ed1a98a059 clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::FunctionDecl*&, clang::sema::...
classM88kAsmPrinter:publicAsmPrinter {public:explicitM88kAsmPrinter(TargetMachine &TM,std::unique_ptr<MCStreamer> Streamer):AsmPrinter(TM,std::move(Streamer)){}StringRefgetPassName()constoverride{return"M88k Assembly Printer"; }voidemitInstruction(constMachineInstr *MI)override; }; ...
FunctionType::get 的第一个参数是返回类型;第二个参数是一个 LLVM::ArrayRef 结构,并且最后的 false 指明了后面未跟可变数量的参数。ArrayRef 结构与矢量相似,只是它不包含任何基础数据,并且主要用于包装诸如阵列和矢量等数据块。由于这个改变,输出显示...
官方语法参考 https://llvm.org/docs/LangRef.html 应用与实践 开发都是基于源码开发,所以我们首先要进行源码下载和编译。 源码下载 下载LLVM $ git clone https://git.llvm.org/git/llvm.git/ 下载clang $ cd llvm/tools $ git clone https://git.llvm.org/git/clang.git/ ...