You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.3 KiB
2.3 KiB
PW6 实验报告
-
舒英特 PB21111704
-
杨宇航 PB21051030
问题回答
-
1-1 一个
while语句对应三个标签:第一个标签处执行判断,第二个标签处执行函数体,第三个标签对应while的末尾。br指令有两种形式:br label a表示直接跳转到a标签处;br i1 x, label a, label b表示x是真则跳到a,x是假则跳到b。 -
1-2 函数调用语句的格式是call @( ),包含了返回值类型,参数类型及、其具体值。
-
2-1 两种用法的区别为,使用的指针类型不同,前者数据类型为
i32,指针类型为i32\*,只有一个参数,表示一维的偏移量;后者数据类型为[10 x i32](数组),指针类型为[10 x i32]*,有两个参数,分别表示一个维度的偏移量 -
3-1 在
scope中单独处理func方便管理在当前作用域中的变量,方便处理局部变量以及实现整个modul的结构层次
实验设计
- task1:理解LLVM IR指令含义,首先将所给的sy代码翻译成单赋值中间表示,然后翻译为LLVM IR
- task2:理解提供的生成器接口,调用接口实现生成Task1中的LLVM IR
- task3:根据生成的语法树,遍历语法树的节点,补充对各个节点的访问代码,生成对应的LLVM IR
实验难点及解决方案
- 主要难点为理解生成LLVM IR模块的用法,然后对应到具体的LLVM IR语句,参考所给示例进行理解熟悉用法从而解决
- 其次是根据对语法树结点的访问,调用正确的接口来生成对应的LLVM IR代码语句,参考PW5的形式进行解决
实验总结
- 本次实验使我们组成员进一步了解了LLVM IR的语法
- 本次实验使我们组员可以将课堂理论知识中的IR部分与实践相结合,理解更加透彻
- 本次实验使我们组成员更深入理解了LLVM的部分工作原理和机制
- 本次实验使我们组成员提升了对于C++语法中共享指针的熟练程度
实验反馈
-
task1和task2中,所需要完成翻译的sy代码都相对简单,可以考虑提供一个具体算法的代码(类似于所给demo),可以进一步加深理解
-
task3中可以适当提供给一个实现示例,可以帮助同学们更快熟悉和理解接下来所需要完成的实验任务
组间交流
- 无