草庐IT

llvm-project

全部标签

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++ - Visual Studio 错误 : LNK1104: cannot open file 'kernel32.lib' - only in WP8 projects/Win32 builds

我最近遇到了这个问题(几天前一切正常):VisualStudio2012开始拒绝构建原生WP8项目。今天,我从模板“WindowsPhoneDirect3D应用程序(仅限native)”创建了新解决方案,以检查WP是否正确支持我新创建的DLL。我尝试编译这个项目,首先没有任何更改或额外的引用-VS生成的纯代码。但是,它因给定错误而失败。我很清楚这是什么意思,可能的原因是什么,但是我不明白,在这种情况下它是从哪里来的。奇怪的事情:这只发生在“Win32”配置中,ARM编译正常:1>------Buildstarted:Project:PhoneDirect3DApp,Configurat

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++ Qt 框架 : qmake exits with error code 2, 找不到 project.pro 文件,但它在那里

正如标题所说,我在使用QtCreator时遇到了问题。我开始玩它并创建了一个包含一些代码的main(),当我想编译它以查看它在屏幕上的显示方式时,我无法这样做,我看到以下错误:Cannotfindfile:/Users/Eugene/Documents/Qt/Test/test.pro.Leprocessus"/Users/Eugene/QtSDK/Desktop/Qt/473/gcc/bin/qmake"terminatedwitherrorcade2.ErrorduringthecompilationoftheprojectTest(build:Desktop)duringthes

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随

c++ - 在 llvm 的 IR 代码中添加函数调用

你能给我一个例子,说明如何添加一个简单的函数调用吗foo(x);在llvm中通过我的IR代码? 最佳答案 一个简单的学习方法就是使用ELLCC将输出选项作为LLVMC++API代码。两个要点:确保foo的定义可用;否则你需要首先定义它。通常,您需要使用getOrInsertFunction然后使用IRBuilder插入body为功能。创建CallInst,一个简单的方法是使用CallInst*IRBuilder::CreateCall(Value*,ArrayRef,constTwine&).这是我之前为llvm3.4写的一段;希望