热搜关键词: cadence新能源汽车电机传感器

pdf

高级编译器设计与实现中文版

  • 1星
  • 2023-02-09
  • 16.84MB
  • 需要1积分
  • 13次下载
  • favicon收藏
  • rep举报
  • free评论
标签: 编译器

编译器

本书涵盖了现代微处理器编译器的设计和实现方面的所有高级主题。

本书首先介绍编译器的结构、符号表管理、中间代码结构、运行时支持等问题,探讨过程内的控制流分析、数据流分析、依赖关系分析和别名分析的各种方法,并介绍一系列的全局优化。接下来,讲述过程间的控制流分析、数据流分析和别名分析,以及程间优化和如何应用过程间信息来改善全局优化。然后,讨论有效利用层次存储系统的优化技术。最后,详细介绍4种商业化编译系统,以提供编译器结构、中间代码设计、优化策略和效果的专门例子。

本书适合作为高等院校计算机专业研究生和高年级本科生的教材,也适合需要了解高级编译器设计和构造有关问题的计算机专业人员参考。

出版者的话

专家指导委员会

译者序

前言

第1章  高级主题介绍  1

1.1  编译器结构回顾  1

1.2  基本问题中的高级论题  2

1.3  代码优化的重要性  4

1.4  优化编译器的结构  5

1.5  激进型优化编译器中各种优化的位置  7

1.6  本书各章的阅读流程  10

1.7  本书没有涉及的相关主题  10

1.8  例子中所用的目标机  11

1.9  数的表示与数据的大小  11

1.10  小结  11

1.11  进一步阅读  12

1.12  练习  12

第2章  非形式化编译算法表示  13

2.1  扩展的巴科斯-诺尔范式语法表示  13

2.2  ican简介  14

2.3  ican概貌  16

2.4  完整的程序  17

2.5  类型定义  18

2.6  声明  18

2.7  数据类型和表达式  19

2.7.1  一般简单类型  20

2.7.2  枚举类型  20

2.7.3  数组  21

2.7.4  集合  21

2.7.5  序列  22

2.7.6  元组  23

2.7.7  记录  23

2.7.8  联合  24

2.7.9  函数  24

2.7.10  编译专用的类型  24

2.7.11  值nil  25

2.7.12  size运算符  25

2.8  语句  25

2.8.1  赋值语句  26

2.8.2  过程调用语句  27

2.8.3  返回语句  27

2.8.4  goto语句  27

2.8.5  if语句  27

2.8.6  case语句  27

2.8.7  while语句  28

2.8.8  for语句  28

2.8.9  repeat语句  28

2.8.10  ican的关键字  28

2.9  小结  29

2.10  进一步阅读  29

2.11  练习  29

第3章  符号表结构  31

3.1  存储类、可见性和生命期  31

3.2  符号属性和符号表项  32

3.3  局部符号表管理  34

3.4  全局符号表结构  35

3.5  存储绑定和符号寄存器  38

3.6  生成取数和存数指令的方法  42

3.7  小结  46

3.8  进一步阅读  46

3.9  练习  47

第4章  中间表示  49

4.1  与中间语言设计有关的问题  49

4.2  高级中间语言  50

4.3  中级中间语言  51

4.4  低级中间语言  52

4.5  多级中间语言  52

4.6  我们的中间语言:mir、hir和lir  53

4.6.1  中级中间表示(mir)  53

4.6.2  高级中间表示(hir)  56

4.6.3  低级中间表示(lir)  57

4.7  用ican表示mir、hir和lir  58

4.7.1  用ican表示mir  59

4.7.2  用ican表示hir  62

4.7.3  用ican表示lir  64

4.8  管理中间代码的若干数据结构和例程的ican命名  67

4.9  其他中间语言形式  70

4.9.1  三元式  70

4.9.2  树  71

4.9.3  无环有向图(dag)  72

4.9.4  前缀波兰表示  73

4.10  小结  74

4.11  进一步阅读  74

4.12  练习  74

第5章  运行时支持  77

5.1  数据表示和指令  77

5.2  寄存器用法  80

5.3  局部栈帧  81

5.4  运行时栈  83

5.5  参数传递规则  84

5.6  过程的入口处理、出口处理、调用和返回  86

5.6.1  用寄存器传递参数:平面寄存器文件  87

5.6.2  用运行时栈传递参数  88

5.6.3  用具有寄存器窗口的寄存器传递参数  89

5.6.4  过程值变量  91

5.7  代码共享与位置无关代码  91

5.8  符号和多态语言支持  94

5.9  小结  96

5.10  进一步阅读  96

5.11  练习  97

第6章  自动产生代码生成器  99

6.1  简介代码生成器的自动生成  100

6.2  语法制导技术  100

6.2.1  代码生成器  102

6.2.2  代码生成器的产生器  103

6.2.3  删除链循环  110

6.2.4  删除句法阻滞  112

6.2.5  最后的考虑  115

6.3  语义制导的分析介绍  115

6.4  树模式匹配和动态规划  116

6.5  小结  120

6.6  进一步阅读  120

6.7  练习  121

第7章  控制流分析  123

7.1  控制流分析的方法  125

7.2  深度为主查找、前序遍历、后序遍历和宽度为主查找  128

7.3  必经结点和后必经结点  132

7.4  循环和强连通分量  139

7.5  可归约性  143

7.6  区间分析和控制树  144

7.7  结构分析  147

7.8  小结  156

7.9  进一步阅读  157

7.10  练习  157

第8章  数据流分析  159

8.1  一个例子:到达-定值  159

8.2  基本概念:格、流函数和不动点  163

8.3  数据流问题及其解决方法的分类  166

8.4  迭代数据流分析  168

8.5  流函数的格  171

8.6  基于控制树的数据流分析  172

8.7  结构分析  172

8.7.1  结构分析:向前问题  172

8.7.2  结构分析:向后问题  178

8.7.3  结构分析方程的表示  180

8.8  区间分析  181

8.9  其他方法  182

8.10  du链、ud链和网  183

8.11  静态单赋值形式  184

8.12  数组、结构和指针的处理  188

8.13  数据流分析器的自动构造  188

8.14  更贪婪的分析  189

8.15  小结  191

8.16  进一步阅读  192

8.17  练习  192

第9章  依赖关系分析和依赖图  195

9.1  依赖关系  195

9.2  基本块依赖dag  196

9.3  循环中的依赖关系  200

9.4  依赖关系测试  204

9.5  程序依赖图  207

9.6  动态分配的对象之间的依赖关系  209

9.7  小结  210

9.8  进一步阅读  211

9.9  练习  211

第10章  别名分析  213

10.1  各种现实程序设计语言中的别名  215

10.1.1  fortran  77中的别名  216

10.1.2  pascal中的别名  216

10.1.3  c中的别名  217

10.1.4  fortran  90中的别名  218

10.2  别名收集器  218

10.3  别名传播器  222

10.4  小结  227

10.5  进一步阅读  227

10.6  练习  228

第11章  优化简介  229

11.1  第12~18章讨论的全局优化  230

11.2  流敏感性和可能与一定信息  231

11.3  各种优化的重要性  231

11.4  优化的顺序与重复  232

11.5  进一步阅读  235

11.6  练习  235

第12章  前期优化  237

12.1  常数表达式计算(常数折叠)  237

12.2  聚合量标量替代  238

12.3  代数化简和重结合  240

12.3.1  地址表达式的代数化简和重结合  241

12.3.2  对浮点表达式应用代数化简  246

12.4  值编号  247

12.4.1  作用于基本块的值编号  247

12.4.2  全局值编号  251

12.5  复写传播  256

12.6  稀有条件常数传播  261

12.7  小结  267

12.8  进一步阅读  269

12.9  练习  269

第13章  冗余删除  271

13.1  公共子表达式删除  271

13.1.1  局部公共子表达式删除  272

13.1.2  全局公共子表达式删除  276

13.1.3  向前替代  284

13.2  循环不变代码外提  284

13.3  部分冗余删除  292

13.4  冗余删除和重结合  298

13.5  代码提升  299

13.6  小结  302

13.7  进一步阅读  302

13.8  练习  304

第14章  循环优化  305

14.1  归纳变量优化  305

14.1.1  识别归纳变量  306

14.1.2  强度削弱  312

14.1.3  活跃变量分析  319

14.1.4  归纳变量删除和线性函数测试替换  320

14.2  不必要边界检查的消除  325

14.3  小结  327

14.4  进一步阅读  329

14.5  练习  329

第15章  过程优化  331

15.1  尾调用优化和尾递归删除  331

15.2  过程集成  334

15.3  内嵌扩展  337

15.4  叶例程优化和收缩包装  338

15.4.1  叶例程优化  338

15.4.2  收缩包装  339

15.5  小结  341

15.6  进一步阅读  343

15.7  练习  343

第16章  寄存器分配  345

16.1  寄存器分配和指派  345

16.2  局部方法  346

16.3  图着色  347

16.3.1  图着色寄存器分配概述  347

16.3.2  顶层结构  349

16.3.3  网,可分配对象  350

16.3.4  冲突图  354

16.3.5  冲突图的表示  355

16.3.6  寄存器合并  358

16.3.7  计算溢出代价  359

16.3.8  修剪冲突图  361

16.3.9  指派寄存器  363

16.3.10  溢出符号寄存器  365

16.3.11  图着色寄存器分配的两个例子  367

16.3.12  其他问题  375

16.4  基于优先级的图着色  376

16.5  其他寄存器分配方法  377

16.6  小结  377

16.7  进一步阅读  378

16.8  练习  380

第17章  代码调度  381

17.1  指令调度  381

17.1.1  分支调度  382

17.1.2  表调度  385

17.1.3  自动生成指令调度器  390

17.1.4  超标量实现有关的调度  390

17.1.5  基本块调度中的其他问题  390

17.1.6  跨基本块边界的调度  392

17.2  前瞻取和上推  392

17.3  前瞻调度  393

17.4  软流水  393

17.4.1  窗口调度  395

17.4.2  展开-压实软流水  397

17.4.3  循环展开  400

17.4.4  变量扩张  403

17.4.5  寄存器重命名  404

17.4.6  软流水的其他方法  407

17.4.7  层次归约  407

17.5  踪迹调度  408

17.6  渗透调度  409

17.7  小结  411

17.8  进一步阅读  413

17.9  练习  413

第18章  控制流和低级优化  415

18.1  不可到达代码的删除  415

18.2  伸直化  417

18.3  if化简  419

18.4  循环化简  420

18.5  循环倒置  421

18.6  无开关化  422

18.7  分支优化  422

18.8  尾融合或交叉转移  423

18.9  条件传送  424

18.10  死代码删除  425

18.11  分支预测  429

18.12  机器方言和指令归并  430

18.13  小结  433

18.14  进一步阅读  433

18.15  练习  435

第19章  过程间分析与优化  437

19.1  过程间控制流分析:调用图  438

19.2  过程间数据流分析  445

19.2.1  流不敏感副作用分析  445

19.2.2  流敏感副作用:程序概要图  455

19.2.3  副作用计算中的其他问题  458

19.3  过程间常数传播  458

19.4  过程间别名分析  461

19.4.1  流不敏感别名分析  462

19.4.2  传值和传指针语言的过程间别名分析  471

19.5  过程间优化  473

19.6  过程间寄存器分配  475

19.6.1  连接时的寄存器分配  475

19.6.2  编译时的过程间寄存器分配  477

19.7  全局引用的聚合  477

19.8  过程间程序管理中的其他主题  478

19.9  小结  478

19.10  进一步阅读  480

19.11  练习  480

第20章  存储层次优化  483

20.1  数据和指令高速缓存的影响  484

20.2  指令高速缓存优化  485

20.2.1  利用硬件辅助:指令预取  485

20.2.2  过程排序  485

20.2.3  过程和基本块的放置  489

20.2.4  过程内的代码安置  489

20.2.5  过程分裂  492

20.2.6  过程内和过程间方法的结合  492

20.3  数组元素的标量替换  493

20.4  数据高速缓存优化  496

20.4.1  过程间的数据安排  497

20.4.2  循环转换  498

20.4.3  局部性与循环铺砌  502

20.4.4  利用硬件辅助:数据预取  504

20.5  标量优化与面向存储器的优化  505

20.6  小结  506

20.7  进一步阅读  508

20.8  练习  508

第21章  编译器实例分析与未来的发展趋势  509

21.1  sun用于sparc的编译器  510

21.1.1  sparc体系结构  510

21.1.2  sun  sparc编译器  511

21.2  ibm  power和powerpc体系结构的xl编译器  517

21.2.1  power和powerpc体系结构  517

21.2.2  xl编译器  518

21.3  dec用于alpha的编译器  524

21.3.1  alpha体系结构  524

21.3.2  alpha的gem编译器  525

21.4  intel  386体系结构上的intel参考编译器  530

21.4.1  intel  386体系结构  530

21.4.2  intel编译器  531

21.5  小结  538

21.6  编译器设计和实现未来的趋势  539

21.7  进一步阅读  539

附录a  本书使用的汇编语言指南  541

附录b  集合、序列、树、dag和函数的表示  549

附录c  软件资源  557

参考文献  561

索引  579

推荐帖子 最新更新时间:2023-03-27 05:30

FUN-E环球易|资深规划师带你避开留学陷阱
  3月10日下午,FUN-E环球易国际升学规划中心(简称“环球易”)的老师及学生们在LAVAZZA咖啡厦门中华城店举办了出国留学交流沙龙,本次沙龙由环球易资深留学专家Kelly老师担任主讲嘉宾,以“留学那些事儿”为主题,为有出国留学想法的同学们答疑解惑。      Kelly老师在英美澳新等主流英语系国家的留学规划、院校申请等方面具有丰富经验,曾帮助N+学生成功申请世界名校。沙龙上,她从“大
是不发 TI技术论坛
读好书《运算放大器参数解析与LTspice应用仿真》02 共模抑制比案例分析
本帖最后由 1nnocent 于 2021-5-12 15:56 编辑 假期收到了之前申请的测评书籍《运算放大器参数解析与LTspice应用仿真》, 大概看了一下,对第二章中的共模抑制比案例分析感触比较深, 这里分享一下阅读的感受,案例大概是这样的: 使用两片ADA4522-2组建差动电路,电路结构是由前端输入的两个缓冲器和差动放大电路两部分组成, 实现对差分信号的十
1nnocent 模拟电子
【基于RGB-D人脸检测及环境监测得低成本智能猫眼】物料开箱—STM32F750
非常荣幸能够入围提交得创意方案能够入围得捷电子设计大赛,非常感谢主办方EEWORLD和得捷电子,提供的开发板,以及精心搭建的大赛平台。   在收到入围邮件后,由于有些小细节问题不太清楚,与活动负责人lightxixi进行了及时得沟通,并得到了耐心得解答,特别感谢。   2022-06-20下得单,2022-07-01便已经收到了快递,比预期的快很多。   申请的
iamstarlee Digi-Key得捷电子技术专区
今日直播:TI剖析更精准的超声气体流量计量创新方案,还有精美礼品等你
超声波不是用来看娃吗?真的可以测流量吗?TI用事实告诉你答案是肯定的~ 较于机械传感器方案,它使用寿命长(>10年)且精度更高。想真正了解并应用专为超声波水表、热量计和燃气表而设计的超声波传感器MCU,快来观看今日 TI上午10点的直播。没时间看?点此登记邮箱可在会后收到直播回顾资料:含直播视频、PPT、问答汇总。 直播时间:4月16日(今日)上午10:00-11:30 直播看点
EEWORLD社区 TI技术论坛
利尔达MSP430离线烧写器修复一例
因为经常会用到利尔达的MSP430烧写器,最近有几个坏了,我研究了下,并已成功修复。分享经验给需要的人。故障现象是,可以装在成功下载文件,但是直接接到板子上不能下载成功。研究发现,接上下载器的主板供上电,就可以下载成功。故障确定在了下载器电源输出部分。拆开后,因为没有原理图,只能顺着线路去研究。发现TI的仿真器和下载器都有软件选择输出电压功能,硬件实现的方式是,通过一个可编程的可变电阻接到一个可调
忘归尘 微控制器 MCU
#以拆会友#拆解希捷320g,2.5寸硬盘
      这个是移动硬盘里拆出来的,在一个阳光明媚的下午,它突然就罢工了,然后被我放在某个箱子里了。今天整理东西,翻出来了,就顺便拆了,满足下自己的好奇心。       第一张,拆正面照片。 拆完6颗螺钉,上盖还是打不开,仔细观察,发现在贴纸下面还有一颗,见下图: 开盖,看看里面。看看那可以当镜子的盘片,看到上面的两圈,就晓得为啥硬盘洗白了。 取开磁头驱动部分的盖板,结果只是
shihuntaotie 以拆会友
keil编译与bit-band位带操作问题
按照资料的记录,STM32G431使用的是cortex-M4的核心,应该可以使用位带操作地址的功能。现在想使用bit-band操作,但是查看keil的工程编译定义。IRAM=20000000,SIZE=8000,片上SRAM为32K大小,现在疑惑的是,keil的变量内存分配是从20000000开始的呢?还是20008000开始的? 还有就是IRAM2内存是各什么用处? 敬请高手解答!
bigbat stm32/stm8
TL431反馈回路的分析和设计
TL431(如图一)是最常用的三端可调电流基准源之一,热稳定性能好,性价比高,被广泛应用于运放电路,比较器电路,ADC基准源,可调压电源,开关电源等。在隔离开关电源电路中尤为常见,TL431常被用做运放配合线性光耦来完成电压环的补偿。如图二所示(图中L是为了降低输出电压纹波加的小电感)。 图一图二简要介绍反激电源闭环反馈回路原理:线性光耦只适合传输低频信号且在传输过程中会产生较大的传输误差,为了
alan000345 模拟与混合信号

评论

G986
谢谢楼主的分享!
2023-02-12 09:31:38
登录/注册

意见反馈

求资源

回顶部
查找数据手册?

EEWorld Datasheet 技术支持

热门活动

相关视频

可能感兴趣器件

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
×