llvm

How to save IR to a file and build it to an executable file?

白昼怎懂夜的黑 提交于 2020-08-22 12:52:50
问题 Now I use clang build my .c file to .s file. And I have used the llvm API modify the IR. However, now I can't save my modified IR to a file. I want to use "LLVMWriteBitcodeToFile", but I can't find the struct of "LLVMOpaqueModule"; I want to use "WriteBitcodeToFile", it always show me "type mismatch". And I also want to know how to build an IR file to a executable file. Next are two methods I use to save a module: 1、First use WriteBitcodeToFile bool unbuffered = false; llvm::raw_ostream ro

How do I specify a clang-format file?

流过昼夜 提交于 2020-08-22 07:13:53
问题 I just built clang 5.0.0 on a Redhat 6 machine and tried to run clang-format. I'm unable to get the -style option to read in a style file. Here's an example of a set of commands that I think should work: ./clang-format -style=llvm -dump-config > .llvm-format ./clang-format -style=.llvm-format ~/myFile.cc When I run this command I get the following error: Invalid value for -style It appears to find and use .clang-format when placed in a parent directory as expect. The built-in types also work:

How do I specify a clang-format file?

有些话、适合烂在心里 提交于 2020-08-22 07:13:29
问题 I just built clang 5.0.0 on a Redhat 6 machine and tried to run clang-format. I'm unable to get the -style option to read in a style file. Here's an example of a set of commands that I think should work: ./clang-format -style=llvm -dump-config > .llvm-format ./clang-format -style=.llvm-format ~/myFile.cc When I run this command I get the following error: Invalid value for -style It appears to find and use .clang-format when placed in a parent directory as expect. The built-in types also work:

Inserting GetElementpointer Instruction in LLVM IR

[亡魂溺海] 提交于 2020-08-22 05:59:17
问题 I am wondering how to insert a GetElementPointer instruction in LLVM IR through LLVM Pass, say suppose I have an array %arr4 = alloca [100000 x i32], align 4 and Want to insert a gep like %arrayidx = getelementptr inbounds [100000 x i32]* %arr, i32 0, i32 %some value the what will be the sequence of instructions to write as in IRBuilder Class there are so many instructions to create getelementpointer. Which One to use and what will be its parameters. can anyone explain it with example Any

Swift: how to fully strip internal/inline symbols?

Deadly 提交于 2020-08-21 04:51:33
问题 I need to write some license checking code in Swift. I know Swift is not optimal for that kind of code in the first place, as it is harder to obfuscate. But if the code that needs to know whether the app is registered is written in Swift, this is still better than putting the license checking code in a separate framework that can be swapped out. To make attacking that code harder, I'm trying to obfuscate the code by at least removing the symbols related to it. For this, I have some inlined

在linux环境下使用lldb调试,以及 dump 安卓内存文件

自作多情 提交于 2020-08-17 19:16:16
已知android某进程 so文件 在maps中如下: 我期望是按照 映射的内存点 cd140000-cd1b4000 dump出文件,而不是将整个so pull下来 。所以本文开始(root android手机一台+linux系统环境): 一、将lldb push到手机,并执行 adb push "E:\Android\sdk\lldb\3.0\android\arm64-v8a\lldb-server" /data/local/tmp/ adb shell su cd /data/local/tmp/ chmod 755 lldb-server #启动lldb ./lldb-server platform --listen "*:10086" --server 二、转发端口 #新开sh,执行 adb forward tcp:10086 tcp:10086 三、连接android设备上的lldb 首先你需要在你的linux系统上安装lldb,然后执行lldb。进入后执行以下命令 platform select remote-android #ENU7N16709000458 是adb devices显示的设备名称 platform connect connect://ENU7N16709000458:10086 attach -p 30827 本来是想用LLDBFrontend

【LLVM】LLVM架构介绍

这一生的挚爱 提交于 2020-08-15 05:27:03
本文主要介绍了LLVM的架构设计。LLVM命名源自于底层虚拟机(Low Level Virtual Machine)的缩写。它并不是针对于某一种语言的编译器工具,它是一种提供支持与保护的一系列底层的工具链程序集合。让LLVM与其它编译器不同的是它的内部架构。下面就介绍LLVM的内部架构。 从2000年的11月开始,LLVM被设计为一系列拥有清晰接口并且可重用的库,在那时候,开源的编程语言的实现被用作特别目的,而且经常是进行庞大的独立执行。这样的话,复用静态库(例如GCC)做静态分析或者代码重构时就会变得特别困难。而且脚本语言经常是通过动态解释嵌入到即将运行的大型应用程序中。这种动态运行时使得代码臃肿。复用其中的某一模块几乎不可能,而且丝毫没有共享精神。 抛开编译器本身实现不谈,各个流行语言之间实现方式的交流也是极端分化的:某一种语言实现通常要么采用传统的编译器(如GCC、Free Pascal...),要么采用运行时的编译方式。同时提供两种编译方式的可不常见。 LLVM从本质上改变了这一切,LLVM被用来作为同时支持静态和动态运行时编译器的基础框架。它同时也代替了各种实现特殊目的的编译器,例如Apple OpenGL stack 的运行时特殊引擎和Adobe After Effects 的图片处理库。目前,LLVM已经被用于创造各种新的产品。 传统的编译器设计 传统的静态编译器

写在PHP8发布之前的话

依然范特西╮ 提交于 2020-08-12 08:12:08
PHP8 就要发布了,大版本号更新,PHP 8的JIT是最大的新特性。大家可能很多人不知道,其实PHP8的JIT是先于PHP7开始开发的。 那还是在2013年的时候,我还在微博负责微博主站架构,记得是某个中午正在跟微博的同事开会,Zeev突然在Skype上找我,问我有没有兴趣做Zend的兼职顾问,参与一个很有趣的项目。 (Zend顾问合同) 于是整个2013年下半年,我都跟着Dmitry在为PHP5.5开发基于LLVM的JIT编译器,在那个过程中,Dmitry教了我很多的东西,我非常感谢他。 很多后来的PHP开发者可能不知道,在那几年,PHP的社区面临着一个很大的分裂风险,也就是Facebook的HHVM,当时HHVM在性能上有很明显的优势,除了Facebook以外,不少组织和公司,比如Wikimedia,国内的百度, 为了性能也开始尝试迁移PHP到HHVM。 整个PHP社区面临着分裂的风险。而性能,是这一切的原因。 所以,当时PHP5.5的JIT就是为了解决这个严重的风险而开启的,当然后来的故事大家也都知道了,基于LLVM的JIT在Benchmark上有着很明显的提升,但在实际的项目中看不到明显的性能提升,最大的问题现在来看还是在于PHP本身的数据结构基础。 虽然那个版本的JIT失败了,但是在开发过程中我们发现了很多PHP本身可以优化的点

写在PHP8发布之前的话

不打扰是莪最后的温柔 提交于 2020-08-12 06:27:40
PHP8 Alpha马上就要发布了,大版本号更新,PHP 8的JIT是最大的新特性。大家可能很多人不知道,其实PHP8的JIT是先于PHP7开始开发的。 那还是在2013年的时候,我还在微博负责微博主站架构,记得是某个中午正在跟微博的同事开会,Zeev突然在Skype上找我,问我有没有兴趣做Zend的兼职顾问,参与一个很有趣的项目。 (Zend顾问合同) 于是整个2013年下半年,我都跟着Dmitry在为PHP5.5开发基于LLVM的JIT编译器,在那个过程中,Dmitry教了我很多的东西,我非常感谢他。 很多后来的PHP开发者可能不知道,在那几年,PHP的社区面临着一个很大的分裂风险,也就是Facebook的HHVM,当时HHVM在性能上有很明显的优势,除了Facebook以外,不少组织和公司,比如Wikimedia,国内的百度, 为了性能也开始尝试迁移PHP到HHVM。 整个PHP社区面临着分裂的风险。而性能,是这一切的原因。 所以,当时PHP5.5的JIT就是为了解决这个严重的风险而开启的,当然后来的故事大家也都知道了,基于LLVM的JIT在Benchmark上有着很明显的提升,但在实际的项目中看不到明显的性能提升,最大的问题现在来看还是在于PHP本身的数据结构基础。 虽然那个版本的JIT失败了,但是在开发过程中我们发现了很多PHP本身可以优化的点

半小时,将你的Spark SQL模型变为在线服务

限于喜欢 提交于 2020-08-11 09:38:32
SparkSQL在机器学习场景中应用 第四范式已经在很多行业落地了上万个AI应用,比如在金融行业的反欺诈,媒体行业的新闻推荐,能源行业管道检测,而SparkSQL在这些AI应用中快速实现特征变换发挥着重要的作用 SparkSQL在特征变换主要有一下几类 多表场景,用于表之间拼接操作,比如交易信息表去拼接账户表 使用udf进行简单的特征变换,比如对时间戳进行hour函数处理 使用时间窗口和udaf进行时序类特征处理,比如计算一个人最近1天的消费金额总和 SparkSQL到目前为止,解决很好的解决离线模型训练特征变换问题,但是随着AI应用的发展,大家对模型的期望不再只是得出离线调研效果,而是在真实的业务场景发挥出价值,而真实的业务场景是模型应用场景,它需要高性能,需要实时推理,这时候我们就会遇到以下问题 多表数据离线到在线怎么映射,即批量训练过程中输入很多表,到在线环境这些表该以什么形式存在,这点也会影响整个系统架构,做得好能够提升效率,做得不好就会大大增加模型产生业务价值的成本 SQL转换成实时执行成本高,因为在线推理需要高性能,而数据科学家可能做出成千上万个特征,每个特征都人肉转换,会大大增加的工程成本 离线特征和在线特征保持一致困难,手动转换就会导致一致性能,而且往往很难一致 离线效果很棒但是在线效果无法满足业务需求 在具体的反欺诈场景,模型应用要求tp99