LLVM每日谈之二 LLVM IR

2023-10-29

作者:snsn1984

在介绍LLVM IR之前,我们需要先了解下LLVM的结构。传统的静态编译器分为三个阶段:前端、优化和后端。

LLVM的三阶段设计是这样的:
这样做的优点是如果需要支持一种新的编程语言,那么我们只需要实现一种新的前端。如果我们需要支持一种新的硬件设备,那我们只需要实现一个新的后端。而优化阶段因为是针对了统一的LLVM IR,所以它是一个通用的阶段,不论是支持新的编程语言,还是支持新的硬件设备,这里都不需要对优化阶段做修改。所以从这里可以看出LLVM IR的作用。
LLVM IR主要有三种格式:一种是在内存中的编译中间语言;一种是硬盘上存储的二进制中间语言(以.bc结尾),最后一种是可读的中间格式(以.ll结尾)。这三种中间格式是完全相等的。
LLVM IR是LLVM优化和进行代码生成的关键。根据可读的IR,我们可以知道再最终生成目标代码之前,我们已经生成了什么样的代码。而且根据IR,我们可以选择使用不同的后端而生成不同的可执行代码。同时,因为使用了统一的IR,所以我们可以重用LLVM的优化功能,即使我们使用的是自己设计的编程语言。

如果想直观的看下llvm的IR到底是什么样的,可以先写一个helloworld的程序,文件名字叫做hello.c。

根据下列文档的步骤配置llvm:

http://clang.llvm.org/get_started.html

然后根据文档的内容使用下列命令可以得到二进制的.bc文件:

clang -emit-llvm -c hello.c -o hello.bc

然后使用下列命令可以得到对应的hello.ll文件,这个文件是可读的,可以通过文本编辑器打开。

llvm-dis hello.bc

这样我们就可以直观的得到IR的两种格式了,至于在内存中的那种格式,我们是无法通过文件的形式得到的。

我们一般都是查看.ll格式,因为这本身就是给人阅读的IR格式。


关于LLVM IR的介绍,LLVM专门有一个文档,文档的地址为:

转载于:https://www.cnblogs.com/ainima/archive/2012/10/02/6332014.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LLVM每日谈之二 LLVM IR 的相关文章

  • CMAKE_MAKE_PROGRAM is not set 解读

    目录 CMAKE MAKE PROGRAM 未设置 错误原因 解决方案 示例1 GNU Make 示例2 Ninja CMakeLists txt 的结构 示例 CMakeLists txt 文件 总结 CMAKE MAKE PROGRAM
  • CTF之逆向入门

    逆向工程 Reverse Engineering 又称反向工程 是一种技术过程 即对一项目标产品进行逆向分析及研究 从而演绎并得出该产品的处理流程 组织结构 功能性能规格等设计要素 以制作出功能相近 但又不完全一样的产品 逆向工程源于商业及
  • 拼多多详情API开启运营比价新纪元

    随着互联网的快速发展 电商行业正在迅速崛起 拼多多作为一家新兴的电商平台 凭借其独特的营销策略和创新的商业模式 成为了电商行业的一匹黑马 在拼多多的成功背后 其详情API接口营销起到了至关重要的作用 本文将详细介绍拼多多详情API接口营销的
  • 如何给 unplugin-vue-components/vite 写一个简单的 resolver

    大部分工作 unplugin vue components 都已经处理好了 我们只需要接收组件名来判断是否是自己的组件 然后处理对应的导入逻辑 一共 3 个字段 as 重命名类似 import componentNameReName fro
  • 每天10个前端小知识 <Day 1>

    前端面试基础知识题 1 将数组的length设置为0 取第一个元素会返回什么 设置 length 0 会清空数组 所以会返回 undefined 2 e target 和 e currentTarget 有什么区别 e target 触发事
  • Web 安全漏洞之 OS 命令注入

    什么是 OS 命令注入 上周我们分享了一篇 Web 安全漏洞之 SQL 注入 其原理简单来说就是因为 SQL 是一种结构化字符串语言 攻击者利用可以随意构造语句的漏洞构造了开发者意料之外的语句 而今天要讲的 OS 命令注入其实原理和 SQL
  • 前端必备的 web 安全知识手记

    前言 安全这种东西就是不发生则已 一发生则惊人 作为前端 平时对这方面的知识没啥研究 最近了解了下 特此沉淀 文章内容包括以下几个典型的 web 安全知识点 XSS CSRF 点击劫持 SQL 注入和上传问题等 下文以小王代指攻击者 话不多
  • 前端基础:回顾es6相关知识

    Author note 题记 ECMAscript is international standard of javascript ECMA 是 js的国际标准版语言 let and const 为什么之前用var现在需要用let cons
  • Android SDK开发艺术探索(五)安全与校验

    一 前言 本篇是Android SDK开发艺术探索系列的第五篇文章 介绍了一些SDK开发中安全方面的知识 包括资源完整性 存储安全 权限校验 传输安全 代码混淆等知识 通过基础的安全配置为SDK保驾护航 探索SDK开发在安全方面的最佳实践
  • 基于java的web仓库管理系统设计与实现

    基于java的web仓库管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的Web仓库管理系统是近年来快速发展的领域之一 它提供了丰富的功能 如数据存储 数据检索 数据分析和数据可视化等 本文将重点介绍基于Java的Web仓库管
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 【计算机毕业设计】趵突泉景区的智慧导游小程序_5ztvv

    当今社会已经步入了科学技术进步和经济社会快速发展的新时期 国际信息和学术交流也不断加强 计算机技术对经济社会发展和人民生活改善的影响也日益突出 人类的生存和思考方式也产生了变化 传统趵突泉景区的智慧导游采取了人工的管理方法 但这种管理方法存
  • 【计算机毕业设计】SpringBoot+Vue.js协同过滤算法美食推荐小程序 _7tr93

    伴随着我国社会的发展 人民生活质量日益提高 于是对各种需求进行规范而严格是十分有必要的 所以许许多多的微信小程序应运而生 此时单靠人力应对这些事务就显得有些力不从心了 所以本论文将设计一套协同过滤算法美食推荐小程序 帮助美食推荐进行美食分类
  • 界面组件DevExpress ASP.NET Core v23.2 - 拥有全新的主题样式

    DevExpress ASP NET Core Controls使用强大的混合方法 结合现代企业Web开发工具所期望的所有功能 该套件通过ASP NET Razor标记和服务器端ASP NET Core Web API的生产力和简便性 提供
  • 低代码配置-列表页组件设计

    保存 表单属性存放 bill 筛选项配置存放 filterLayout 列表按钮存放 buttonLayout 列表布局存放 listLayout api存放 api 数据结构 layout 存放表单基础配置 bill 存放按钮基础配置 b
  • 课设:NFA确定化和最小化程序的设计与实现(html+css+js实现)

    文章目录 问题描述 待解决问题 1 如何存储NFA或者是DFA 2 NFA多初态问题 3 子集化过程思路 4 分割法过程思路 使用方法 下载链接 问题描述
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求 链接建立后 客户端和服务器端就可以通过TCP链接直接交互数据 WebSocket链接后可以通过 send 方法来向服务器发送数据 并通过 onn
  • chrome浏览器无法在地址栏输入内容搜索问题解决--图文

    关于日常遇到的小问题解决记录一下 1 导航栏录入信息后跳转错误 2 解决办法 默认百度搜索引擎地址错误 百度正确的搜索格式是 http www baidu com s wd s chrome浏览器中百度的搜索格式是 http www bai
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结
  • 【前端】canvas图片加文字

    注释标记了操作步骤 import React Component createRef from react class CertifyImgRender extends Component bgRef createRef

随机推荐

  • HarmonyOS开发:那些开发中常见的问题汇总(一)

    前言 本来这篇文章需要讲述静态共享包如何实现远程依赖和上传以及关于静态共享包私服的搭建 非常遗憾的告诉大家 由于组织管理申请迟迟未通过 和部分文档官方权限暂未开放 关于这方面的讲解需要延后了 大概需要等到2024年第一季度 也就是来年 毕竟
  • windows Server 2012 R2安装部署

    Windows Server 2012 R2 是基于Windows8 1 以及Windows RT 8 1 界面的新一代 Windows Server 操作系统 提供企业级数据中心和混合云解决方案 易于部署 具有成本效益 以应用程序为重点
  • Delphi 通过TNetHTTPClient访问http,最新解析快手无水印视频地址链接方法

    一 解析快手无水印视频链接原理 共分三个步骤 1 通过视频分享获得视频地址短链接 如 https www kuaishou com f X7tIV0jIivYUyTk 2 通过TNetHTTPClient重定向获得视频地址长链接 如 htt
  • 把桌面从C盘改到D盘,结果直接让D盘变成了桌面,改回去发现图标变少了

    昨天晚上我一时兴起想把我电脑桌面的位置改到D盘 然后我就打开了它的属性 把位置改了 点了 应用 后弹出来一个弹窗 询问我 是否要将所有文件从原位置移动到新位置 我点了 是 其实正常来讲只要你那个新位置是个文件夹就可以 但是我当时不知道 我没
  • JavaSHA-256加解密

    Java中可以使用java security MessageDigest类来进行SHA 256加密 以下是一个使用SHA 256加密字符串的示例代码 import java security MessageDigest public cla
  • IBM发布基于OpenStack的服务

    原文地址 http www csdn net article 2013 03 05 2814349 IBM lunch service based on OpenStack 时隔13年后 IBM再一次拥抱开源 这一次 是被称为21世纪Lin
  • spi设备驱动

    include
  • iOS第三方支付集成-微信支付

    序言 说来惭愧 终于有支付的需求给我做了 哇嘎嘎 开动 文章尽量写的详细点 从自身出发 希望能给大家一点帮助 欢迎大佬指正 支付流程 步骤1 用户在商户APP中选择商品 提交订单 选择微信支付 步骤2 商户后台收到用户支付单 调用微信支付统
  • hdlm 5.9在hacmp中的配置

    hdlm 5 9是hds多路径软件最新版本的 它与以前版本有不小的改进 比如以前一个ldev 如果有4个通道 那么在os上面可以看到4个hdisk 然后这个hdisk再组成一个dlmfdrv 在5 9中只有一个hdisk 没有dlmfdrv
  • 音视频编码类型

    H264 格式介绍 avcc 前四个字节表示nalu的size 大端 Annex B 0x000001或者0x00000001开始码 nalu针对0x000000 0x000001 0x000002和0x000003插入0x03防竞争字节
  • IDEA导入Eclipse项目步骤详解

    IDEA导入Eclipse项目步骤详解 文章目录 IDEA导入Eclipse项目步骤详解 首先在idea里file gt new gt Project from Existing Sources 选中到要导入的项目 这里我选用创建新的 Cl
  • 情感分析概述

    情感分析主要研究观点挖掘 倾向性分析等 一 为什么需要观点挖掘和倾向性分析 文本信息主要包括两类 客观性事实 主观性观点 但是已有的文本分析方法主要侧重在客观性文本内容的分析和挖掘 二 什么是观点挖掘与倾向性分析 观点挖掘与倾向性分析就是从
  • Java多线程进阶(十九)—— J.U.C之synchronizer框架:CyclicBarrier

    本文首发于一世流云专栏 https segmentfault com blog 一 CyclicBarrier简介 CyclicBarrier是一个辅助同步器类 在JDK1 5时随着J U C一起引入 这个类的功能和我们之前介绍的Count
  • Jmeter录制脚本

    性能关注点 接口响应时间 50毫秒 1000毫秒 吞度量 10000万每天 tPs 每秒处理事务数 压测需求与业务操作步骤 压测对象 http news baidu com 压测页面 首页 国际频道 财经频道 步骤 访问首页 单击 国际频道
  • 测试用例的优先级

    刚接触软件测试 先熟悉一下测试用例的优先级的概念 有时会听到0级别case的说法 其实这是对具有一定优先级的测试用例的说法 在这际测试实践中 测试用例根据重要性分成一定的等级 在不通的公司 可能测试用例的等级划分有所差异 但是基本大同小异
  • 积分计算两条曲线围绕y坐标轴旋转形成的立体体积

    积分计算两条曲线围绕y坐标轴旋转形成的立体体积 和附录文章1类似 计算两条曲线y x 2和y 2x围绕y坐标轴形成的立方体体积 首先要计算积分的上限和下限 根据两者相交的点求出 0 4 外层大圆R y y 1 2 和内层小圆r y y 2的
  • 使用iptables进行入站流量过滤

    iptables是Linux内置的流量过滤工具 同时也是多种防火墙的底层实现 如fw3 在本次应用中 iptables通过丢弃不符合规则的数据包 使得未注册设备在DHCP获取ip阶段失败 无法连接到专用内网 保证系统安全 iptables使
  • 10年软件测试工程师感悟——写给还在迷茫中的朋友

    这两天和朋友谈到软件测试的发展 其实软件测试已经在不知不觉中发生了非常大的改变 前几年的软件测试行业还是一个风口 随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业 目前软件测试行业 缺口 已经基本饱和 当然 我说的是最基础的功能测试
  • QT之D指针

    什么是D指针 如果你已经看过到Qt源码 你会发现它经常使用Q D和Q Q 宏 本文介绍了这些宏的用途 该Q D和Q Q宏是一个设计模式的一部分被称为d 指针 也称为 不透明的指针 其中一个库的实现细节可以从它的用户 并转移到执行被隐藏 另外
  • LLVM每日谈之二 LLVM IR

    作者 snsn1984 在介绍LLVM IR之前 我们需要先了解下LLVM的结构 传统的静态编译器分为三个阶段 前端 优化和后端 LLVM的三阶段设计是这样的 这样做的优点是如果需要支持一种新的编程语言 那么我们只需要实现一种新的前端 如果