Tag: llvm

使用什么代替mudflap与gcc / llvm(用于检测内存访问错误)?

似乎 -fmudflap function 已从 GCC中删除 。 因此,我的问题是:使用什么来代替它来动态分析程序的超出读/写,未初始化的读取和此类问题? (也许作为一个附带问题:它为什么被删除了?) mudflap的方法(在编译器中使用工具化生成的代码)看起来非常优雅。 背景 其他工具在源代码级别(例如Insure)上对机器代码级别(例如Purify)进行工具化,或者在仿真CPU(例如Valgrind)期间进行工具化。 mudflap方法有可能找到valgrind或purify无法检测到的错误(例如,基于堆栈的arrays访问错误)。 它比其他方法更轻巧。 我正在寻找一个开源解决方案。

我可以用gcc编译一个函数然后用clang吗?

我试图使用SSE4.2内部函数与clang / llvm,但它没有编译,因为我得到cannot select intrinsic从LLVM中cannot select intrinsic错误。 另一方面,相同的代码在gcc中完美地编译。 所以我想,也许我可以使用gcc编译该函数,以便拥有一个对象或库文件,然后在我的代码中调用该库函数,该函数由clang / llvm编译。 那会有用吗?

使用Clang将C ++转换为C代码

我知道llvm可以用来将c ++转换成c代码。 我想知道clang是否可以做同样的事情(看到clang来自llvm )。 那么我可以使用clang将c ++代码转换为c代码吗? 如果你想知道我为什么要这样做,这是我的场景: PIC是一家微控制器制造商,它不制造c ++编译器,但确实为其大多数产品制作了c编译器。 我想用c ++编写,然后作为构建过程的一部分,将c ++代码转换为临时c文件,然后将其转换为PIC编译器,并且我已经为PIC micro编写了c ++代码。

LLVM cpp后端,是否取代c后端?

我的问题是关于CPP后端,它是否与C后端的用途相同? C后端是我最喜欢的LLVMfunction之一,我很不高兴它被删除了。 什么是真正的差异? 我非常感谢任何帮助。 参考: LLVM 3.1发行说明 “C后端已被删除……”

有没有办法显示LLVM自动矢量化的位置?

上下文:我在Objective-C库中有几个循环,它处理大型文本数组。 我现在可以看到它以单线程方式运行。 据我所知,LLVM现在能够自动矢量化循环,如Apple在WWDC会议上所述。 然而,它的方式非常谨慎,其中一个原因是由于CPU流水线操作而导致变量被修改的可能性。 我的问题:我怎样才能看到LLVM在哪里对我的代码进行了矢量化,更有用的是,我如何才能收到解释为什么它无法对我的代码进行矢量化的调试消息? 我敢肯定,如果它能看出为什么它不能自动矢量化它,它可以指出我,我可以进行必要的手动调整,使其可以矢量化。 如果我没有指出这个问题已经或多或少已经被问过,而且非常迟钝,我会在这里失职。

如何将cscope用于具有.c,.cpp和.h文件的项目?

我正在开发一个需要理解llvm编译器源代码的项目。 要浏览llvm的源代码,我尝试在源的根目录中使用带有以下命令的cscope: cscope -R * 但它不起作用。 因为主要有.cpp和.h文件,但也有一些.c文件。 那么现在我不知道如何让cscope工作? 有人可以帮忙吗?

Clang – 将C头编译为LLVM IR / bitcode

假设我有以下简单的C头文件: // foo1.h typedef int foo; typedef struct { foo a; char const* b; } bar; bar baz(foo*, bar*, …); 我的目标是获取此文件,并生成一个如下所示的LLVM模块 : %struct.bar = type { i32, i8* } declare { i32, i8* } @baz(i32*, %struct.bar*, …) 换句话说,将带有声明的C .h文件转换为等效的LLVM IR,包括类型解析,宏扩展等。 通过Clang传递它来生成LLVM IR会产生一个空模块(因为实际上没有使用任何定义): $ clang -cc1 -S -emit-llvm foo1.h -o – ; ModuleID = ‘foo1.h’ target […]

设置llvm :: ConstantInt的值

我正在玩LLVM。 我想过在中间代码中改变常量的值。 但是,对于类llvm :: ConstantInt ,我没有看到setvalue函数。 任何想法如何修改IR代码中常量的值?

LLVM – 使用clang自动运行自己的通行证

我为llvm写了一些自己的传递,以便与clang一起使用它们。 我将它们集成在llvm中(不是动态加载的)。 当我输入时,它们甚至列在Optimizations available:部分中: opt –help-hidden 当我打电话给clang时,我想自动运行我自己的一个通行证作为最后一个 : clang ./hello.bc -o ./hello 甚至用c代码: clang ./hello.c -o ./hello 当我手动使用opt运行传递时,会生成修改后的ByteCode并将其写入新的.bc文件: opt -my-pass ./hello_optimized.bc 当我用clang编译修改后的.bc时,会再次运行普通的clang优化,这会破坏我手动执行的传递的优化: clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized 我的问题是: 如何使用clang自动运行我自己的书面传递作为最后一次传递? 另一种可能的解决方案是完全停用所有通行证,或者至少取消clang / opt的死代码/function。 我怎么能这样做?

我可以依靠我的编译器来优化const char *上的strlen吗?

在我的SAX xml解析回调(XCode 4,LLVM)中,我正在对这种类型的代码进行大量调用: static const char* kFoo = “Bar”; void SaxCallBack(char* sax_string,…..) { if ( strcmp(sax_string, kFoo, strlen(kFoo) ) == 0) { } } 假设strlen(kFoo)由编译器优化是否安全? (Apple示例代码已经预先计算了strlen(kFoo),但我认为这对于大量常量字符串很容易出错。) 编辑:优化的动机:使用NSXMLParser在iPod touch 2G上解析我的SVG地图需要5秒钟(!)。 所以,我想切换到lib2xml,并优化字符串比较。