草庐IT

c++ - 如何在 LLVM 中声明一个函数并在以后定义它

如何在LLVM中声明一个函数(具有特定签名)并创建对它的调用,例如llvm::Value*return=m_builder.CreateCall(function,arguments);但稍后定义函数体(必须是InlineAsm函数)?稍后我将按以下方式访问模块中的函数for(llvm::Module::iteratorit=mod->begin(),end=mod->end();it!=end;++it){if(needsImplementation(it)){llvm::InlineAsm*inlineCall=...it.body=inlineCall//Thisdoesn'te

c++ - 使用 LLVM pass 添加内在函数

我已经使用LLVM传递向输入代码添加了一个内在函数。我能够看到内部调用,但我无法弄清楚如何将代码编译到我的目标架构(x86_64)。我正在运行以下命令:clang++$(llvm-config--ldflags--libsall)ff.s-ofoo但是链接器提示undefinedreference:/tmp/ff-2ada42.o:Infunction`fact(unsignedint)':/home/rubens/Desktop/ff.cpp:9:undefinedreferenceto`llvm.x86.sse3.mwait.i32.i32'/tmp/ff-2ada42.o:Inf

c++ - LLVM/Clang 是否支持弱链接的 'weak' 属性?

简而言之:LLVM/Clang是否支持“弱”属性?我正在学习一些Arduino库源代码(更详细的是HardwareSerial.cpp),我发现了一些以前从未使用过的有趣属性weak:#ifdefined(HAVE_HWSERIAL0)voidserialEvent()__attribute__((weak));boolSerial0_available()__attribute__((weak));#endif我发现它很有趣,而且我读到如果未定义,链接器应将其设置为NULL。但是,在我使用Clang进行的测试中,我无法使用它。文件lib.cpp:#include"lib.h"#inc

c++ - LLVM 是避免动态转换规则的异常(exception)吗?

LLVM有自己的RTTI替代方案,它比内置RTTI的速度有所提高,并允许动态转换为没有vtable的类(dyn_cast)。但是,它仍然可以完全按照dynamic_cast的方式使用。尽管它确实允许它与更多类一起使用,但已被使用。dyn_casttemplatedocumentationLLVM是一个享有盛誉的C++项目,所以这似乎与俗语背道而驰,即过多的动态转换是糟糕设计的标志,也称为代码异味。当然,与标准dynamic_cast相比,性能更好的动态转换并不能改善其在设计中的使用。.那么谁在这里?在C++代码中是否存在大规模使用动态转换是一个好的设计选择的情况?Google在LLVM

c++ - 如何在 LLVM IR 中获取字符串文字的值?

我是LLVM的新手。我正在尝试编写一个基本的Pass,当它被赋予中间表示时,它将检查printf调用的参数。如果格式字符串不是字符串文字,那么我当然无法检查它。但通常是这样。我要检查的示例IR是:@.str=privateunnamed_addrconstant[7xi8]c"Hi%u\0A\00",align1definei32@main()nounwind{entry:%retval=allocai32,align4storei320,i32*%retval%call=calli32(i8*,...)*@printf(i8*getelementptrinbounds([7xi8]*

c++ - 缺少用于 LLVM 编译器-rt 的 libclang_rt.san-x86_64.a 文件

我刚刚构建了LLVM/Clangcompiler-rt并尝试了-fsanitize选项。但奇怪的是链接失败了,因为它找不到libclang_rt.san-x86_64.a。/usr/bin/ld:cannotfind/home/hongxu/RESEARCH/llvm-git/obj/bin/../lib/clang/3.7.0/lib/linux/libclang_rt.san-x86_64.a:Nosuchfileordirectoryclang-3.7:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)当我进入

C++ LLVM 类功能

我在玩LLVM,但现在我被困在为类生成代码。如何使用LLVM创建类功能?类运算符是否像处理函数一样处理?如何处理自动分配(如C++)?如何通过像C++这样的虚拟继承来支持像Java那样的接口(interface)? 最佳答案 长版一般类行为一种直接的方法是创建结构,然后将方法建模为常规函数,这些函数接收指向表示包含类的结构的指针——本质上是一个this指针——作为第一个参数。可以通过分配结构然后调用特殊的初始化函数(实际上是构造函数)对分配的数据来对分配进行建模。继承可以通过构建一个结构来完成,该结构包含一个特殊的“父”字段(或多个

c++ - 如何避免 LLVM 的 Support CommandLine 泄漏库参数?

我一直在为我的一种语言开发编译器,想利用LLVM支持库CommandLine处理参数解析。我只添加了两个简单的声明:staticcl::optOutputFilename("o",cl::desc("Outputfilename"),cl::value_desc("filename"));staticcl::listInputFilenames("i",cl::desc("Inputfiles"),cl::value_desc("filenames"),cl::OneOrMore);然后我在main中添加通常的调用:intmain(intargc,char*argv[]){cl::Pa

c++ - LLVM 它是什么以及我如何使用它来跨平台编译

我在这里和那里阅读有关llvm的文章,它可以用来减轻c++中跨平台编译的痛苦,我试图阅读文档,但我不明白我怎么能在现实生活中使用它发展问题有人可以用简单的话向我解释我如何使用它吗? 最佳答案 LLVM的关键概念是程序的低级“中间”表示(IR)。这个IR大概是汇编代码级别的,但是包含了更多的信息,方便优化。LLVM的强大之处在于它能够将这种中间表示的编译推迟到特定目标机器,直到代码需要运行之前。即时(JIT)编译方法可用于应用程序在需要之前生成所需的代码。在许多情况下,您在程序运行时拥有比在总部获得的更多信息,因此可以大大优化程序。首

c++ - Xcode 4.5 和 OpenMP with Clang (Apple LLVM) 仅使用一个内核

我们在一个C++11项目上使用Xcode4.5,我们使用OpenMP来加速我们的计算:#pragmaompparallelforfor(uintx=1;x虽然事件监视器显示程序使用了多个线程,但我们观察到只使用了一个内核:我们还在使用GCC4.7的Ubuntu上运行相同的代码,我们观察到所有内核上的争用。可能是AppleLLVM中删除了OpenMP支持吗?是否有OpenMP的替代方案?我们无法切换到GCC,因为我们使用C++11功能。 最佳答案 编辑:此答案现已部分过时。现代ClangsupportOpenMP,只是不是Apple随