首页 > 其他分享 >从LLVM IR 来看编译器“优化”都在做些什么(release)

从LLVM IR 来看编译器“优化”都在做些什么(release)

时间:2022-08-29 20:35:58浏览次数:57  
标签:LLVM 编译成 IR 编译 编译器 Rust

这些东西可以讲很深,但今天只会带大家看些简单的LLVM IR跟 组合语言,并且举一些例子来讲 编译器优化 在做些什么。今天的示例会以Rust 为主,因为Rust 编译器的核心是建立在LLVM 之上,所以也支持编译成LLVM IR。虽然如此,就算你完全不了解LLVM Rust 也还是可以读,因为今天会从LLVM 是啥开始讲,而且用到的Rust 语法也超超简单。

LLVM

LLVM 的命名源自于Low Level Virtual Machine 的缩写,但随着专案发展,现在的LLVM 跟虚拟机已经没太大的关系,而是变成一系列编译器工具链的组合,其中也包含今天的LLVM IR 跟各种IR Optimizer

LLVM IR

LLVM IR(Intermediate Representation) 直翻是「中间表达式」,说白话点他就是一种比较低阶的程式语言(大概介于C 跟组合语言之间)。一个简单的add function 用LLVM IR 写起来就像这样,语法稍微啰嗦了点,但还算好读(分号后面是我的注解)

 

从这范例可以看出LLVM IR 有个特点,就是IR 会把每个步骤切得很细,而且也没有任何语法糖。像我们平常会直接写return x + y,但因为在LLVM IR 中相加跟return 是两个步骤,所以一定要写成两行。

Rust 的编译过程

接着来说说Rust 是怎么编译的:因为Rust 是高阶语言,要直接编译成最低阶的Assembly 并不容易,所以Rust 编译会分成两个阶段,首先是「把原始码编译成IR」,接着才是「从IR 产生Assembly」

更多图文信息参考,欢迎关注

 

标签:LLVM,编译成,IR,编译,编译器,Rust
From: https://www.cnblogs.com/jentleTao/p/16637264.html

相关文章

  • MAC brew 安装wireguard-tools
     ➜Desktopbrewinstall-swireguard-tools==>Downloadinghttps://ghcr.io/v2/homebrew/core/bash/manifests/5.1.16########################################......
  • shell #!/bin/bash: No such file or directory报错
    写了个shell脚本第一行是#!/bin/bash执行时报错#!/bin/bash:Nosuchfileordirectory虽然不影响执行,但是每次都报这个错误看着很别扭百度了一下,因为我这个sh文件是......
  • 肖sir__会计分录
    会计分录(1)名称:计分录亦称"记账公式"。简称"分录"。(2)它根据复式记账原理的要求,对每笔经济业务列出相对应的双方账户及其金额的一种记录。在登记账户前,通过记账凭证编制会......
  • Spirng MVC
    dispatcherServlet:前置控制器,在spring项目启动时生成,初始化其中的handlermapper,handlderadapter,viewresponse。作为http请求的入口,dispatcherServlet会先通过handl......
  • "unable to execute 'gcc': No such file or directory error: command 'gcc&#039
    背景今天在loogarch安装oss2,安装报错:unabletoexecute'gcc':Nosuchfileordirectoryerror:command'gcc'failedwithexitstatus1解决办法yuminstall-y......
  • 解决vue3+ts require报错
      自己安装命令安装之后,在ts.config.json里面配置之后(最后一行){"compilerOptions":{"target":"es5","module":"esnext","strict":true,"......
  • 报错:ReferenceError: __dirname is not defined in ES module scope
    报错:__dirnameisnotdefinedinESmodulescope前言新版NodeJS支持通过ESM方式导入模块,代码如://CommonJS规范(旧)const{readFileSync,writeFileSync}=r......
  • Airtest IDE 自动化测试9——text和keyevent
    前言在AirtestIDE的Airtest录制辅助窗内,包含有三种类型的录制按钮:操作类型辅助类型断言类型touchtextassert_existsswipekeyeventassert_not_exists......
  • Airtest IDE 自动化测试10——图片编辑器(Image Editor)
    前言Airtest是通过截图识别图片,根据识别到图片的匹配度来定位到元素的,图片识别参数是可以修改的。图片编辑器(ImageEditor)双击编辑框截到的图片,进入到ImageEditor界......
  • Airtest IDE 自动化测试12 - 如何让 Airtest 启动指定包名(start_app)
    前言做app自动化测试,第一步是启动待测app,Airtest可以通过截图app图标定位到启动图标,但必须保证是在app列表页。如何让Airtest启动指定包名app?可以通过指定app包名来......