Skip to content

ustc-compiler/LLVMDriver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IR-Simple-Lab 实验文档

0. 前言

本次实验分为2关。请务必使用git提交
实验目的旨在让大家熟悉生成中间代码所需要的相关知识: LLVM IR、 SysYF IR(LLVM IR的轻量子集)以及如何基于Clang/LLVM构建编译器的驱动程序Driver。 在开始实验之前,请确保LLVM的版本最好为10.0.1,且PATH环境变量配置正确。可以通过lli --version命令输出版本信息来验证,本机版本与平台版本相差过大可能会导致评测时出现错误。(虚拟平台上已经安装10.0.1版本,可以通过前述命令进行检查)

安装LLVM

如果你在本机开展实验,你需要事先安装等软件。以LLVM 10.0.1为例,LLVM 10.0.1可以从网址获取。

你可以选择Pre-Built Binaries中相应的压缩包解压得到二进制文件(linux)或者点击安装(windows),然后添加到PATH(linux平台)或者添加到环境变量(windows,在安装包中有相应选项添加至系统路径)。

下面以Ubuntu20.04系统为例,说明安装步骤。

cd ~
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.1/clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-20.04.tar.xz
tar -xvf clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-20.04.tar.xz
mv clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-20.04 llvm10.0.1
export PATH=~/llvm10.0.1/bin:$PATH

本次实验的主要内容

  1. 第一部分: 了解LLVM IR。通过clang生成的.ll,了解LLVM IR与C程序代码的对应关系。相应文档见phase1.md
  2. 第二部分: 了解编译器驱动程序Driver。通过本实验提供的基于Clang Driver改造的可扩展LLVM驱动程序,了解LLVM的前后端处理流程,包括JIT即时编译执行。相应文档见phase2.md
  3. 实验报告:在report.md中撰写报告。

1. 实验要求

1.1 目录结构

除了下面特别指出的需要你修改或提交的文件,其他文件请勿随意修改。

.
├── CMakeLists.txt
├── README.md                           <- 实验文档说明(你在这里)
├── doc
│   ├── phase1.md                       <- 阶段1(第1关)的文档
│   ├── phase2.md                       <- 阶段2(第2关)的文档
│   ├── SysYF语言定义.pdf
|   ├── runtime.md                      <- SysYF的运行时库说明
|   └── SysYFIR.md                      <- SysYF IR的精简说明
├── report
│   └── report.md                       <- 需提交的实验报告
├── lib                                 <- SysYF的运行时库
|   ├── lib.h                           <- 包含可以在SysYF程序中使用的I/O函数接口声明
|   └── lib.c
└── Student
    ├── task1						    <- 第1关任务相关的目录
    |   ├── ll                          <- 需提交的LLVM IR文件(.ll)的目录(第1关)
    |   |   ├── assign_hand.ll
    |   │   ├── fun_hand.ll
    |   │   ├── if_hand.ll
    |   |   ├── io_hand.ll
    |   │   └── while_hand.ll
    |   ├── sy                          <- SysYF源程序的目录
    |   |   ├── assign_test.sy
    |   │   ├── fun_test.sy
    |   │   ├── if_test.sy
    |   │   ├── io.sy
    |   │   ├── io.in                   
    |   │   ├── io.out
    |   │   └── while_test.sy
    |   └── demo                        <- 示例C程序的目录
    |       └── go_upstairs.c
    └── task2							<- 第2关任务相关的目录
        ├─ CMakeLists.txt          
        ├─ README.md                    <- LLVM驱动程序的说明
        ├─ main.cpp                     <- 调用编译器驱动程序的主程序文件,需要提交对qsort程序的编译执行版本(第2关)
        ├─ include
        |	├─ IR
        |   |   ├─ gcd_generator.hpp  	
        |   |   └─ qs_generator.hpp   	<- 需要提交的qsort程序的LLVM IR生成器(第2关)
        |   ├─ runtime
        |   |   ├─ io.h
        |   |   └─ runtime.h
        |   └─ Driver                
        |       └─ driver.h             <- 自定义可扩展Driver类的声明(第2关)
        ├─ src                        
        |   ├─ runtime
        |   |   ├─ io.cpp
        |   |   └─ runtime.cpp          <- 需要提交的qsort程序的运行时库函数实现(第2关)
        |   └─ Driver
        |       └─ driver.cpp             <- 自定义可扩展Driver类的定义
        └─ tests
            ├─ gcd.c
            ├─ helloworld.c
            ├─ quicksort.c 				第2关待翻译为LLVM IR的目标c语言程序
            ├─ quicksort_[*].in         第2关测试样例输入
            └─ quicksort_[*].out        第2关测试样例输出

1.2 提交要求和评分标准

  • 提交要求
    本实验的提交要求分为两部分: 实验部分的文件和实验报告。
    • 实验部分
      • 需要完成 ./Student/task1/ll目录下的5个文件
      • 需要完成./Student/task2/main.cpp./Student/task2/src/runtime/runtime.cpp以及./Student/task2/include/qs_generator.hpp三个文件,并保持与./Student/task2/tests中的测试样例相同的输入输出格式
      • 需要在 ./report/report.md 中撰写实验报告
        • 实验报告内容包括:
          • 实验要求、问题回答、实验设计、实验难点及解决方案、实验总结、实验反馈(具体参考report.md)
    • 提交规范:
      • 不破坏目录结构(report.md如果需要放图片,请新建figs文件夹放在./report下,并将图片放在figs文件夹内)
      • 不上传临时文件(凡是自动生成的文件和临时文件请不要上传)
  • 评分标准: 本次实验分为2部分
    • 禁止执行恶意代码,违者本次实验0分处理
    • 第一部分30分: .ll运行结果正确(1个5分, 注释共5分)
    • 第三部分70分: mClang -IR命令的运行结果正确
  • 迟交规定
    • 迟交需要邮件通知助教:
      • 邮件主题: IRLab迟交-学号
      • 内容: 包括迟交原因、最后版本commit ID、迟交时间等
  • 关于抄袭和雷同 经过助教和老师判定属于作业抄袭或雷同情况,所有参与方一律零分,不接受任何解释和反驳。

如有任何问题,欢迎提issue进行批判指正。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published