摘要 | 第8-9页 |
ABSTRACT | 第9页 |
第一章 绪论 | 第10-16页 |
1.1 研究的目的及意义 | 第10-12页 |
1.1.1 SIMD体系结构 | 第10-11页 |
1.1.2 优化编译器 | 第11页 |
1.1.3 LLVM编译器 | 第11-12页 |
1.2 国内外研究现状 | 第12-14页 |
1.2.1 自动向量化研究现状 | 第12-13页 |
1.2.2 LLVM编译优化研究现状 | 第13-14页 |
1.3 论文的主要工作 | 第14页 |
1.4 论文的组织结构 | 第14-16页 |
第二章 LLVM 编译系统 | 第16-29页 |
2.1 编译器优化 | 第16-19页 |
2.1.1 编译器简介 | 第16页 |
2.1.2 编译器优化 | 第16-19页 |
2.2 LLVM编译优化框架 | 第19-24页 |
2.2.1 LLVM编译结构 | 第19-20页 |
2.2.2 LLVM中间表示 | 第20-21页 |
2.2.3 LLVM工具链 | 第21-23页 |
2.2.4 LLVM优化遍 | 第23-24页 |
2.3 LLVM向量化 | 第24-28页 |
2.4 本章小结 | 第28-29页 |
第三章 LLVM循环向量化实现 | 第29-45页 |
3.1 向量化合法性分析 | 第29-34页 |
3.1.1 LoopVectorizeLegelity类结构 | 第30-33页 |
3.1.2 if语句合并 | 第33页 |
3.1.3 验证指令和访存 | 第33-34页 |
3.2 向量化代价模型 | 第34-36页 |
3.2.1 LoopVectorizationCostModel类结构 | 第34-35页 |
3.2.2 向量化因子和展开因子选择 | 第35-36页 |
3.3 向量代码生成 | 第36-43页 |
3.3.1 InnerLoopVectorize和InnerLoopUnroll类结构 | 第36-37页 |
3.3.2 创建新的循环结构 | 第37-39页 |
3.3.3 向量化循环中的指令 | 第39-43页 |
3.3.4 更新循环基本块支配关系 | 第43页 |
3.4 本章小结 | 第43-45页 |
第四章 基于LLVM实现尾循环向量化 | 第45-57页 |
4.1 循环向量化缺陷 | 第45-47页 |
4.2 尾循环向量化方法 | 第47-51页 |
4.2.1 尾循环向量化结构 | 第47-48页 |
4.2.2 掩码存取和向量填充算法 | 第48-51页 |
4.3 尾循环向量化实现 | 第51-53页 |
4.4 尾循环向量化正确性验证 | 第53-56页 |
4.5 本章小结 | 第56-57页 |
第五章 实验结果与分析 | 第57-62页 |
5.1 实验环境 | 第57页 |
5.2 测试程序和结果分析 | 第57-61页 |
5.2.1 TSVC的测试及分析 | 第57-60页 |
5.2.2 SPEC2006测试结果 | 第60-61页 |
5.3 本章小结 | 第61-62页 |
结束语 | 第62-63页 |
致谢 | 第63-64页 |
参考文献 | 第64-67页 |
作者在学期间取得的学术成果 | 第67页 |