草庐IT

llvm-codegen

全部标签

c++ - 使用 LLVM-gcc 或 gcc 进行部分评估/特化

我对c/c++的(部分)编译时评估很感兴趣(不像c++中那样使用模板参数)。让我们考虑以下情况(取自[1]):doublemypower(doublex,intn){inti;doubleret=x;for(i=1;i然后你在代码的某处调用这个函数:mypower(x,3);//yvariesallthetime,然后编译器可以对此进行优化(例如循环展开)。我使用的一些常用功能确实可以从该优化中受益(通过手动创建专用功能进行测试)。演示文稿[1]描述了一个过程,在该过程中搜索函数并将其替换为函数的专门版本。这似乎有效。但是好像不是很通用,需要替换的功能需要自己写代码。该演示文稿似乎是从

使用 clang/llvm 的 C++ 精确垃圾收集器?

好的,所以我想用C++编写一个精确的“标记和清除”垃圾收集器。我希望做出一些可以帮助我的决定,因为我的所有指针都将包装在“RelocObject”中,并且我将有一个内存块用于堆。这看起来像这样://Thisclassactsasanindirectiontotheactualobjectinmemorysothatitcanbe//relocatedinthesweepphaseofgarbagecollectorclassMemBlock{public:void*Get(void){returnm_ptr;}private:MemBlock(void):m_ptr(NULL){}vo

c++ - 链接时 LLVM IR 类型被错误折叠(C++ API)

开门见山——我正在尝试将两个(或更多)llvm模块链接在一起,但我遇到了来自LLVM的某个奇怪错误。我不想贴太多代码,所以我会在这里使用一堆伪代码。我有3个模块,比方说A、B和C。A是主模块;我用它初始化llvm::Linker。B和C是二级模块;我调用linker.linkInModule(BandC)。所有3个模块都定义了这两种类型:%String=type{i8*,i64}%Character=type{i8*,i64}请注意,它们具有相同的成员类型。此外,函数foo是这样定义的(在模块B中):definei1@_ZN9Character7hasDataEv(%Character

c++ - 为什么我使用 XCode 的 llvm 与来自 MacPorts 的 clang++ 获得更快的二进制文件?

我已经编写了一个基准测试方法来测试我的C++程序(搜索游戏树),并且我注意到使用XCode4.0.2中的“LLVM编译器2.0”选项进行编译可以使我的二进制文件速度明显快于我使用来自MacPorts的最新版本的clang++进行编译。如果我理解正确的话,我在这两种情况下都使用了clang前端和llvm后端。Apple是否改进了他们的clang/llvm发行版以生成更快的MacOS二进制文件?我找不到有关该项目的太多信息。以下是我的程序为各种编译器生成的基准,全部使用-O3优化(越高越好):(Xcode)"gcc4.2":38.7(Xcode)"llvmgcc4.2":51.2(Xcod

c++ - LLVM 异常;捕获处理程序未处理,未调用清理

我正在尝试在JITllvm代码中创建一个异常处理程序。关于exceptionhandlinginLLVM的当前文档目前非常麻烦,所以我一直在尝试重用我从http://llvm.org/demo获得的大部分片段为了获得一个工作示例,但我不确定这些是否与llvm2.9(我正在使用的版本)保持同步。这就是模块在Module::dump()之后的样子;;ModuleID='testModule'declarei32@myfunc()definei32@test_function_that_invokes_another(){entryBlock:%0=allocai8*%1=allocai32

c++ - 为什么在 Visual Studio 中使用 LLVM+Clang 时未定义 __clang__?

我为Windows安装了LLVM,其中包括Clang和一些其他工具。它与VisualStudio集成,甚至让我在项目属性中选择“平台工具集”。但是,当我选择LLVM附带的任何工具集时,未定义__clang__,而是定义了_MSC_VER。在VisualStudio中使用LLVM和Clang时如何定义__clang__?我的VisualStudio版本是2015预览版(但是我也在2013年进行了测试,但也没有成功),我的LLVM版本基于SVN版本225473。我试过LLVM-vs2012、LLVM-vs2013和LLVM-vs2014作为平台工具集但没有成功。

c++ - 无法使用 Microsoft CodeGen 使用 Visual Studio 2015 和 Clang 3.7 构建 Google Test

使用VS2015及其新的内置clang工具集/项目模板,我无法成功构建GoogleTest。我收到以下错误:Erroruseofundeclaredidentifier'chdir';didyoumean'_chdir'?Erroruseofundeclaredidentifier'fdopen'Erroruseofundeclaredidentifier'read'Erroruseofundeclaredidentifier'write'Erroruseofundeclaredidentifier'close'Erroruseofundeclaredidentifier'O_RDON

c++ - 为 LLVM libc++ 3.3 构建静态库和共享库

来自SVN的最新LLVMlibc++3.3带有一个CMakeLists.txt。我是CMake新手,但昨天我学习了足够的知识,能够在RHEL6.4x86_64主机上构建libc++check-out。此外,我能够在所述CMakeLists.txt中添加足够的CPack相关命令以生成libcxx-3.3.svn-0.el6。x86_64.rpm。但很可能是由于CMake的新手,我无法同时构建静态库和共享库。是的。我评论了IsitpossibletogetCMaketobuildbothastaticandsharedversionofthesamelibrary?.但是,我不想使用add

c++ - 在 linux 上为 c++ 构建和使用纯 llvm 工具链

假设这是可能的,有人能告诉我,我必须如何配置cmake构建以在ubuntu-16.04上创建一个“纯”llvm工具链,包括clang会libc++libc++abilibunwind(llvm)编译器-rt任何其他可能相关且“准备好生产”的作品生成的编译器应该尽可能快(打开优化,没有不必要的断言或编译器二进制文件本身的其他检查)安装在单独的本地目录中(我们称之为)不依赖包管理器提供的llvm工具链默认使用libc++、libc++abi等。支持清理器(ubsan、地址、内存、线程)(这可能意味着我必须编译libc++asecondtime)到目前为止我已经克隆了llvm来自http:/

c++ - 使用 llvm::Linker 以编程方式查找未解析的外部对象

我正在使用clang/llvm以编程方式编译和链接C源代码。我发现llvm链接器似乎没有将模块中存在未解析的外部对象这一事实报告为错误。我有以下代码(请原谅长度,但这确实是最低要求):intCompileAndLink(){llvm::InitializeNativeTarget();std::stringcode="intUnresolvedFunction();\n""intmain(){returnUnresolvedFunction();}";clang::DiagnosticOptionsdiagnosticOptions;clang::TextDiagnosticPrint