草庐IT

llvm-codegen

全部标签

c++ - 如何从 LLVM 中的 CallInst 获取函数名称?

我有一个CallInst类型的对象。我怎样才能得到被调用函数的名称(又名被调用者)。假设函数被直接调用(即没有间接函数调用)。 最佳答案 StringRefget_function_name(CallInst*call){Function*fun=call->getCalledFunction();if(fun)//thanks@AntonKorobeynikovreturnfun->getName();//inheritedfromllvm::ValueelsereturnStringRef("indirectcall");}无论

c++ - 在可见性有限的 `std::terminate` 函数中调用 `noexcept` - gcc vs clang codegen

考虑以下代码片段:voidf();voida(){f();}voidb()noexcept{f();}在上面的场景中,f的主体对于当前翻译单元中的编译器是不可见的。因此,由于b被标记为noexcept,必须在调用方生成额外的代码以确保异常被捕获并且std::terminate被调用。这就是clang++-Ofast-std=c++2a所做的(主干版本):a():#@a()jmpf()#TAILCALLb():#@b()pushraxcallf()popraxretmovrdi,raxcall__clang_call_terminate__clang_call_terminate:#@_

c++ - lli: LLVM 错误: 无法选择: X86ISD::WrapperRIP TargetGlobalTLSAddress:i64

在Linux(Debian)上使用clang++-S-emit-llvmmain.cpp&&llimain.ll运行以下代码#includeintmain(){returnstd::async([]{return1;}).get();}由于以下错误,无法在lli上运行:LLVMERROR:Cannotselect:0xd012e0:i64=X86ISD::WrapperRIPTargetGlobalTLSAddress:i640[TF=10]0xd020c0:i64=TargetGlobalTLSAddress0[TF=10]Infunction:_ZSt9call_onceIMNSt

c++ - LLVM 即时编译 : pass C++ exception through JIT code back to host application

我正在开发一个项目,我使用clang生成一些LLVMIR,然后在我的主机应用程序中进行JIT编译和运行。JIT代码调用宿主应用程序中的某些函数可能会引发异常。我希望通过JIT代码抛出异常并在主机应用程序中捕获。据我所知,这应该与LLVM一起使用,但不幸的是,我的测试应用程序总是因“在抛出‘int’实例后调用终止”而崩溃。让我举个简单的例子。我使用clang3.5将以下简单程序编译成LLVMIR:externvoidtest();extern"C"voidexec(void*){test();}与./clang-O0-S-emit-llvmtest.cpp-c结果为test.ll;Mod

c++ - 从 native C/C++ 生成并运行 LLVM 代码

是否可以从原生C或C++编译程序(gcc)中执行这些操作:调用clang并编译函数的给定C代码,作为constchar*传递。获取指针并在LLVM虚拟机中运行。在native程序中获取结果并继续。如何? 最佳答案 有关简约示例,请参阅Clanginterpreter.Cling是这种方法的更实际的例子。 关于c++-从nativeC/C++生成并运行LLVM代码,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

c++ - llvm::Type 结构的字符串表示

llvm::Type2.9及更早版本曾经使用getDescription方法来检索类型的字符串表示形式。llvm3.0中不再存在此方法。我不确定这是否被弃用以支持Type::print(raw_ostream&),但无论如何我对这个API很好奇。关于如何使用它有哪些例子?如何转储到string或constchar*?特别是,我想将字符串传递给Boost::Format,这是一个现代C++sprintf。 最佳答案 我想,您需要创建一个llvm::raw_string_ostream实例并将您的std::string传递给它的构造函数

LLVM之父Chris Lattner:我的AI基础设施软件构建理念

来源|LatentSpaceOneFlow编译翻译|杨婷、宛子琳如果AI如此重要,那么为什么软件如此糟糕?创办Modular之前,这是让 LLVM之父ChrisLattner困扰已久的问题。随后,他与TensorFlow的前产品同事TimDavis合作研究模块化解决方案,以解决人工智能开发中庞大、单一、分散的平台问题。2022年,他们以3000万美元的种子资金启动Modular,继今年5月成功推出AI引擎Modular与编程语言Mojo,不久前又获得1亿美元的A轮融资。尽管Mojo以其多线程编译的Python超集和出色的性能受到瞩目,但这只是一个副业项目,而Modular的Python推理引擎

【网安AIGC专题10.11】2 ILF利用人类编写的 自然语言反馈 来训练代码生成模型:自动化反馈生成+多步反馈合并+处理多错误反馈+CODEGEN -M ONO 6.1 B model

ImprovingCodeGenerationbyTrainingwithNaturalLanguageFeedback写在最前面主要工作启发背景介绍应用现有工作的不足Motivation动机方法ILFExperiments&Results数据集评价指标3.1.验证πReffine\pi_{\text{Reffine}}πReffine​与NLF结合的有效性(可以使用反馈来修复不正确的代码)3.2验证ILF比Fine-Tuningon黄金数据或人工编写的程序的通过率更高3.3评估使用多少GPT生成的Feedback能赶上人工NLF3.4HumanFeedbackIsMoreInformativ

c++ - 解析和修改 LLVM IR 代码

我想阅读(解析)LLVMIR代码(保存在文本文件中)并向其中添加一些我自己的代码。我需要一些这样做的例子,也就是说,这是如何通过使用LLVM为此目的提供的库来完成的。所以基本上我想要的是将IR代码从文本文件读入内存(也许LLVM库以AST形式表示它,我不知道),进行修改,比如在AST中添加更多节点然后最后写返回IR文本文件中的AST。虽然我需要阅读和修改IR代码,但如果有人可以提供或推荐我阅读(解析)它的一些示例,我将不胜感激。 最佳答案 首先,纠正一个明显的误解:LLVM是一个用于操作IR格式代码的框架。看不到AST(*)-你读取

github, git, google: clang-前端插件-给各种无花括号的“块”加花括号-基于llvm15--clang-plugin-add-brace-----google镜像

处理的语句case术语约定或备忘case起止范围:从冒号到下一个’case’开头,简称有:case内、case内容Ast:Abstractsyntaxtree:抽象语法树没插入花括号的case若case内,以下任一条成立,则跳过该case即不会对该case内容用花括号包裹.有#define、有#include、有直属变量声明、空case、有宏调用详述预处理回调收集#include指令、宏定义CollectIncMacro_PPCb:CollectInlucdeMacroPPCallbacks:收集Inlucde和Macro的预处理回调收集#include、#define,以判断case起止范围