LLVM浅析

news2024/11/6 9:35:13

LLVM的探索

编译器的作用就是将源码编译成可以运行的程序。
终端按顺下敲入
vim hello.py
python hello.py

vim hello.c
clang hello.c
./a.out
vim main.m

#imclude<stdio.h>
int main(int argc, char *argv[]){
	printf("hello word!");
};

LLVM概述

请添加图片描述
请添加图片描述
从写代码->LLVM 的动态流程 ->APP运行:
源代码- 预编译 - 编译 - 链接.o - 可执行文件(静态连接和动态连接)- 可执行文件 - dyld - libsystem

Frontend 编译器前端

在这里插入图片描述

Optimizer 优化器

优化器负责进行各种优化。改善代码的运行时间,例如消除多余的计算等

backend 后端/ CodeGenerator代码生成器

将代码映射到目标的指令集。声称机器语言,并且进行机器相关的代码优化。

iOS的编译器架构

Objective C/C/C++使用的编译器前端是Clang,Swift是Swift,后端都是LLVM
在这里插入图片描述
请添加图片描述

编译流程

通过命令可以打印源码的编译阶段

clang -ccc-print-phases main.m

在这里插入图片描述
请添加图片描述
在这里插入图片描述
clang -fmodules -fsyntax-only -Xclang -dump-tokens main.m
会把代码切成一段段的如下:
请添加图片描述
在这里插入图片描述

clang -s -fobjc-arc -emit-llvm main.m

生成的main.II如图 :
请添加图片描述
请添加图片描述

bitCode

xcode7 以后开启bitCode苹果会做进一步的优化。生成.bc的中间代码。
我们通过优化后的IR代码生成.bc代码

clang -emit-llvm -c main.ll -o main.bc 

生成汇编代码

我们通过最终的.bc或者.ll代码生成汇编代码

clang -S -fobjc-arc main.bc -o main.s 

clang -S -fobjc-arc main.ll -o main.s 

生成的汇编代码也可以进行优化

clang -Os -S -fobjc-arc main.m -o main.s

生成目标文件(汇编器)

目标文件的生成,是汇编器以汇编代码作为输入,将汇编代码转换为机器代码,最后输出目标文件。

clang -fmodules -main.s -o main.o

在这里插入图片描述
生成可执行文件(连接)
连接器把编译产生的.o文件和(.dylib.a)文件,生成一个mach-o文件。

clang main.o -o main

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python天气预报系统】又要降温,这个冬天你准备好棉衣秋裤了吗?看了不后悔系列之Python打造智能天气预报系统,爆赞。

前言 鼎鼎大名的南方城市长沙很早就入冬了&#xff0c;街上各种大衣&#xff0c;毛衣&#xff0c;棉衣齐齐出动。 这段时间全国各地大风呜呜地吹&#xff0c;很多地方断崖式降温。瑟瑟发抖.jpg 虽然前几天短暂的温度回升&#xff0c;但肯定是为了今天的超级降温&#xff0c;…

毕业设计 - 基于java web的城市公交查询系统的设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目工程前言 今天学长向大家分享一个 java web 毕业设计项目: 基于java web的城市公交查询系统的设计与实现 一、项目设计 1. 模块设计 系统功能的划分方式可以分成很多种类&#xff0c;但是我按照界面流程将它…

“人生搜索引擎” # Rewind

你想找什么东西&#xff0c;只需要在搜索引擎上输入关键词&#xff0c;它就会把“相关记忆”给你提取出来。这也就是 Rewind 这款搜索引擎想解决的问题。Rewind 给自身的定义是&#xff1a;The Search Engine For Your Life也就是你人生的搜索引擎&#xff0c;它声称能快速搜索…

宠物狗大学生网页设计模板 静态HTML动物保护学生网页作业成品 DIV CSS动物主题静态网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

微信小程序 | 小程序WXSS-WXML-WXS

&#x1f5a5;️ 微信小程序 专栏&#xff1a;小程序WXSS-WXML-WXS &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1…

高并发下秒杀商品,这9个细节你必须掌握好

目录&#xff1a;导读 前言 一、瞬时高并发 二、页面静态化 三、秒杀按钮 四、读多写少 五、缓存问题 1、缓存击穿 2、缓存穿透 六、库存问题 1、预扣库存 2、数据库扣减库存 3、redis扣减库存 4、 lua脚本扣减库存 七、分布式锁 八、mq异步处理 1、消息丢失问…

[附源码]Node.js计算机毕业设计高校线上教学系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我们…

聚观早报 | 明年起手机预装APP均可卸载;爱奇艺VIP会员再次涨价

今日要闻&#xff1a;明年起手机预装APP均可卸载&#xff1b;爱奇艺VIP会员再次涨价&#xff1b;转转首个华南地区自营店开业&#xff1b;马斯克出售股票套现36亿美元&#xff1b;微软将逐步推出欧盟云数据边界明年起手机预装APP均可卸载 12 月 16 日消息&#xff0c;日前&…

2022中国产业数字化发展成熟度区域指数分析——充分利用特长,形成区域比较优势,夯实中国式现代化建设基础

易观分析&#xff1a;近年来&#xff0c;全球经济发展下行&#xff0c;但数字经济表现出了足够的韧性。在国内&#xff0c;产业数字化的经济规模占全国数字经济比重的81.7%&#xff0c;占中国GDP的32.5%&#xff0c;已经成为中国数字经济发展的核心动能。 在此背景下&#xff0…

Pr 入门系列之十四:导出

视频工作流程中的最后一步就是导出。Pr 中&#xff0c;可以方便地导出序列或剪辑&#xff0c;发送给他人&#xff0c;分享到社交媒体渠道&#xff0c;或者创建 DCP&#xff08;数字电影包&#xff09;文件用于影院分发。◆ ◆ ◆导出的一般流程1、首先&#xff0c;在时间轴面…

机器学习100天(三):003 数据预处理之处理缺失值

机器学习 100 天,今天讲的是:数据预处理-处理缺失值。 在上一节,我们导入了数据集,得到特征 X 和标签 y。 我们打开 X,发现 index5 样本的‘年龄’和 index3 样本的‘薪资’数值是 NaN。 NaN(Not a Number)是计算机科学中数值数据类型的一类值,表示空值 可能是由于在…

1.两数之和

传送门&#xff1a;https://leetcode.cn/problems/two-sum/ 目录 题目描述 题解 题目描述 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个…

Android.bp学习

一. Android.bp概念 Android.bp 文件首先是 Android 系统的一种编译配置文件&#xff0c;是用来代替原来的 Android.mk文件的。在Android7.0 以前&#xff0c;Android 都是使用 make 来组织各模块的编译&#xff0c;对应的编译配置文件就是 Android.mk。 在 Android7.0 开始&…

【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

利用HMM纠正测序错误&#xff08;Viterbi算法的python实现&#xff09; 问题背景 对两个纯系个体M和Z的二倍体后代进行约~0.05x的低覆盖度测序&#xff0c;以期获得后代个体的基因型&#xff0c;即后代中哪些片段分别来源于M和Z。已知&#xff1a; 后代中基因型为MM、MZ&…

C++ 内存管理

由于C++需要程序员自己完成堆区的内存回收,因此有可能存在内存泄漏的风险。而Java、Python不需要程序员去考虑内存泄漏的问题,虚拟机都做了内存管理。只要可以跨平台的编程语言都需要做内存对齐,C++、Java、Python都是一样的。内存的定义 程序运行时所需的内存空间分为 固定…

什么是知识,什么是知识图谱,有什么作用,有哪些应用领域?

知识图谱可以帮助机器理解世界&#xff0c;提高人工智能模型的性能。它还可以用于数据挖掘、信息检索、问答系统和语义搜索等领域&#xff0c;提高系统的准确性和可理解性。知识图谱的建模方式和技术也可以用于生物信息学和社交网络分析等领域。 知识图谱背景 在给出知识图谱…

【踩坑笔记】STM32 HAL库+泥人W5500模块

1.HAL库与标准库转换 泥人提供的模块收发程序 HAL库下的收发&#xff08;这里只提供部分接口&#xff0c;其它同样改发&#xff09;&#xff1a; 下边这条是标准库自带的函数&#xff0c;这里只用来和HAL库转换 改完之后&#xff0c;想验证自己的驱动改好没有&#xff0c;…

时序建模的主要流程

一、收集、预处理数据 收集&#xff1a;使用R包TSA的数据集&#xff0c;描述数据的基本统计特征【均值、方差、原始时序图】数据预处理&#xff1a;因为数据来源可靠&#xff0c;故针对数据预处理只做空缺值检查&#xff0c;其基本检测方法如下&#xff1a; 根据时间起点与时间…

nodejs+vue095设计学生选课成绩管理系统

目 录 目 录 III 1绪论 1 1.1课题研究的背景与意义 1 1.2 国内外研究现状和发展趋势 1 1.3课题研究的内容 2 2 关键技术介绍 3 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn ins…

古典乐器网页设计成品 大学生音乐网站制作模板 大学生静态音乐HTML网页源码 dreamweaver网页作业 简单网页课程成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…