编译器
Vincent(Hao Li)
-基于x86/riscv/龙芯mips的编译优化
-面向敏捷芯片开发的敏捷编译技术(编译器自动设计方法)
-面向跨平台跨编译器的性能分析
展开
-
ThinLTO 学习笔记
跨模块优化(CMO)是提高运行时性能的有效方法,它扩展了跨源模块边界的优化范围。CMO方法有链接时间优化(LTO)和轻量级过程间优化(LIPO)。ThinLTO的目标是与常规的非lto构建一样具有可伸缩性,在没有大内存配置的大型应用程序和机器上支持CMO,同时与分布式和增量构建系统很好地集成。这是通过快速的基于摘要的全程序分析(WPA)来实现的,这是唯一的串行步骤,不需要读取或写入程序的中间表示(IR)。2.ThinLTO Design1. Compile : 生成与LTO模式相同的IR原创 2020-11-19 11:28:56 · 1398 阅读 · 0 评论 -
LLVM后端移植笔记1 c910 riscv示例
目录一、后端的六大部分二、后端的七大环节三、建立新后端的七大步骤四、后端介绍1.后端目录2.LLVM后端简介3.后端目录代码结构4.目标指令集的描述实现5.指令选择描述5.riscv后端指令描述6.玄铁C910指令扩展示例7.玄铁C910在编译器中注册示例五. auipc指令设计实现1. RISCVInstrInfo.td2. RISCVInstrFormats.td3.RISCVExpandPseudoInsts.cpp4. AsmPar原创 2020-11-19 11:23:47 · 2747 阅读 · 1 评论 -
GCC后端移植适配
目录Introduction to Machine Descriptions1.Influences on Machine Descriptions2.Organization of GCC MD3. Machine Descriptions的基本结构(1)指定目标指令语义(2)General Move Instruction(3)Relationship Between .md, .c, and.h Files(4)GCC中的翻译顺序(5)Retargetabi.原创 2020-11-19 11:20:48 · 1263 阅读 · 1 评论 -
LLVM阅读笔记及优缺点
目录LLVM阅读笔记1.Tools and Design1.1 Using standalone tools1.2 Delving into the LLVM internal design2.The Frontend3.The LLVM Intermediate Representation3.1 Introducing the LLVM IR3.2 Introducing the LLVM IR in-memory model3.3 Optimizing at the原创 2020-11-19 11:16:55 · 1562 阅读 · 1 评论 -
GCC抽象语法树(AST)可视化------适用于2019最新版本gcc-8.2.0
gcc多版本更替, 使得很多ast 可视化工具都不能用了,向gcc插件VCG也不能在 高版本上使用现在我们找到了一个还适用于 最新版本的方法首先我们创建一个文件命名test.c的Hello World程序。test.c #include<stdio.h> int main(int arg_count,char ** arg_values) {...原创 2019-11-20 13:04:42 · 6370 阅读 · 22 评论 -
gcc各种优化所在位置及循环展开分析
GENERIC 是一种树(tree)的高级表示形式,目的是提供一个语言无关的中间表示。当前 GCC 的主要优化都是基于 GIMPLE 表示形式实现的,包括过程间优化、传统标量优化、循环优化、向量化等。GCC 的 all_passes 遍表中的 expand 过程将 GCC 的 GIMPLE 表示形式转化为另外一种表示形式 RTL。RTL 相当于一种...原创 2019-11-19 14:57:21 · 1727 阅读 · 0 评论 -
Caller-saved register and Callee-saved register
Caller-saved register(又名易失性寄存器AKA volatile registers, or call-clobbered)用于保存不需要在各个调用之间保留的临时数量。因此,如果要在过程调用后恢复该值,则调用方有责任将这些寄存器压入堆栈或将其复制到其他位置。不过,让调用销毁这些寄存器中的临时值是正常的。从被调用方的角度来看,您的函数可以自由覆盖(也就是破坏)这些寄存器...原创 2019-11-19 14:55:32 · 11699 阅读 · 3 评论 -
迭代编译概述
传统的 静态编译器依赖于对微体系结构和程序特征的静态建模来帮 助决定对程序进行何种优化、以何种顺序进行优化、以及优化 的具体参数等,难以适应日趋复杂的硬 和应用程序。迭代编译: 针对通用程序的一种有效的优化方法,其优化过程以一个驱动器为中心,驱动器读取它所需的变换列表和参数范围,测试不同变换与参数组合的性能,根据某种搜索算法确定下一步的变换与参数,在满足一定条件时停...原创 2019-11-19 22:18:20 · 618 阅读 · 0 评论 -
源码编译安装gcc
源码安装gcc/g++ 1. 编译新版gcc需要旧版支持(因为要编译, 废话) 1)确认是否有安装gcc gcc -v2) 如果没有安装gcc, 如果机子有联网,则可以使用以下方法 center-os系统: yum -y install gcc yum -y install gcc-g++ ubuntu系统: sudo apt-get insta...原创 2018-08-28 10:18:02 · 13565 阅读 · 4 评论 -
一、GCC的作用和运行机制
一、GCC的作用和运行机制 GCC是Linux下重要的编译工具,用法这里就不说了,满大街都找得到。这里我重点介绍GCC的运作机制,作为代码分析的铺垫。全篇使用C语言子部件来作分析,因为我对其他语言的编译没有研究。 根据编译原理,语言的编译分为这么几个步骤:词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等。然而从编译器使用的角度来看,要把源代码翻译为可执行文件要经...转载 2018-07-17 15:39:29 · 2974 阅读 · 0 评论