首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
CSC2107编程设计讲解、辅导data程序、c++编程调试 调试Matlab程序|讲解Java程序
项目预算:
开发周期:
发布时间:
要求地区:
University of Toronto
CSC 488 / CSC2107 Compilers and Interpreters Winter 2021
Assignment 6: LLVM IR Optimization (16%)
Due: April. 1, 2021
In this assignment, you will work on 2 parts for LLVM IR optimization in the MiniC Compiler:
• Memory to Register Promotion (alloca2reg) (10 marks out of 16)
• Open-ended IR optimization design (6 marks out of 16)
Note that for the open-ended IR optimization part, we will use the resubmission as the final program
to test and determine the rest of your score (if you decide to do the resubmit).
LLVM IR Optimization Workflow in MiniC (cont’d from Assignment 5 Workflow)
After the MiniC compiler IR Bitcode is generated, PassManager in LLVM will chain multiple optimizations
and analysis passes to run together. Command opt is a LLVM tool that directly invoke a pass on a LLVM
IR bitcode. You will work on the src/Alloca2Reg.cpp source file. opt will do a function pass based on
Alloca2Reg library object on the IR bitcode.
alloca2reg Design
Please review "Safely Promote Local Variable to Registers" section from the lecture (under Files/Slides/Optimizations.pdf).
It shows the detailed design steps. Lecture also provides a link How LLVM Optimizes
a Function as your reference of the assignment.
alloca2reg Related Data Structures & LLVM API
Here is a good tutorial on Writing an LLVM Pass as a starting point. Table 1 shows the data structures
in src/Alloca2Reg.cpp. You can add/modify/delete any structures in src/Alloca2Reg.cpp. We only
provide some structures which may be helpful for you to implement alloca2reg. You are recommended to
modify the structures for the open-ended design part.
Table 2 describes related LLVM APIs for alloca2reg.
Open-ended IR optimization design
In lecture, you were introduced to optimization methods such as machine dependent/independent optimizations.
This section gives you some more resources for reference.
• LLVM Tutorial: Writing an Optimization for LLVM
• How LLVM Optimizes a Function as mentioned above
• Writing an LLVM Pass as mentioned above
You can create new source files for your optimizations OR implement it in Alloca2Reg.cpp. If creating
new files, you may modify src/CMakeLists.txt as an additional library object. You should provide your
command of generating IR bitcode when submitting.
1
Name Description
struct Alloca2RegPass Derived struct from llvm::FunctionPass.
Alloca2RegPass::ID = 0 Declares pass identifier used by LLVM to identify pass. This allows LLVM to
avoid using expensive C++ runtime information. LLVM uses ID’s address to
identify a pass, so the initialization value is not important.
Alloca2RegPass::TargetAllocas &
collectTargetAllocas()
Helps to collect all of the alloca instructions which can be removed. Please
look at step 1 from the lecture.
Alloca2RegPass::Post & Pre As mentioned in lecture, in step 2, they hold the representative value of the
variable at the end of the basic block BB.
Alloca2RegPass::runOnFunction() Overrides an abstract virtual method inherited from llvm::FunctionPass.
Other variables To run an LLVM Pass automatically with clang. You don’t need to worry about
it. You could check out the link here for more details.
Table 1: Data Structure Description
Name under namespace llvm Description
AllocaInst, StoreInst, LoadInst alloca, store, load instructions
PointerType* AllocaInst::getType() Overload to return most specific pointer type.
Type* PointerType::getElementType() Return the type of the element which PointerType points to.
bool Type::isIntegerTy() Return true if the type is integer type.
Value* StoreInst::, LoadInst::getPointerOperand() Get the pointer operand.
Value* StoreInst::getValueOperand() Get the value operand.
Instruction::eraseFromParent() This method unlinks ’this’ from the containing basic block and
deletes it.
BasicBlock::begin(), end() Instruction iterator methods
Function::begin(), end() Basic Block iterator methods
PHINode member functions You can search it for your implementation.
Table 2: LLVM API Description
Requirements
• The functionality of your output program should be correct.
• Your output program should remove all of the alloca instructions which can be removed.
• Your output program must reach a baseline speed under the -O0 flag. The baseline speed is the
assignment 6 sample solution with only the alloca2reg optimization. As a reference, under these specs
(Memory: 16GB 2400 MHz DDR4 & CPU: 2.6GHz 6-Core Intel Core i7), the A6 sample solution with
the -O0 flag running the queen_time.c test case with input=13 50 times consumes 68.46 seconds.
clang-11 with -O3 flag consumes 50.69 seconds. The test script is provided as asst6.py.
• Your open-ended design speed/performance will be competing with the rest of the class. The marks
for open-ended design will depend on your relative rank. Note that even the slowest implementation
that is functionally correct will receive a passing grade for this assignment.
Compilation and Testing
Please make sure you are using clang 11.0. After compiling your MiniC compiler, you can run:
2
# Under build/ directory
# Generate IR Bitcode
src/minicc
-o output.bc
# Run Alloca2Reg pass
opt -O0 -load src/liballoca2reg.so --alloca2reg output.bc -o output_opt.bc
# Generate executable opt/non-opt files
clang output.bc minicio/libminicio.a -o output
clang output_opt.bc minicio/libminicio.a -o output_opt
# Run the executable opt/non-opt files
./output
./output_opt
# Generate IR assembly code (Important for debugging!)
llvm-dis output.bc -o output.ll
llvm-dis output_opt.bc -o output_opt.ll
Public Autotester
We have provided a public autotester a6tester.zip on Quercus. After compiling your code, change
asst6.py to your minicc executable file path. Then simply run:
$./asst6.py
OR in verbose mode
$./asst6.py -v
The tester has several MiniC source files. Your compiler will compile the files and the generated executable
files will run without any errors in the tester. Then, compared to your unoptimized version, the tester simply
checks whether the number of alloca instructions were reduced. Finally, you can compare the runtime of
your solution and use the -O3 clang solution as your reference.
Deliverables
In the project folder, compress the whole project content as a zip file. This zip file must match the structure
of the skeleton code, and it must compile in our A1 environment, or you may receive a 0 on the automarker.
Note that there is only one deadline for the open-ended part of the assignment (1 week after the first due
date). On Markus, please submit:
• code.zip. We will directly unzip your submission, build it from source and run it against public and
private tests.
• explanation.txt: Put your command for generating output_opt.bc in the first line, i.e., "opt
-O0 -load ....". You must use -O0 or don’t use any flag in the command. Your command is used
for testing your output program speed. Then put your explanation of optimization methods in a
newline.
• sample.c: A sample program which you think performs well under your optimizations. Its complexity
and its performance improvement will be considered for grading.
3
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
代做ceng0013 design of a pro...
2024-11-13
代做mech4880 refrigeration a...
2024-11-13
代做mcd1350: media studies a...
2024-11-13
代写fint b338f (autumn 2024)...
2024-11-13
代做engd3000 design of tunab...
2024-11-13
代做n1611 financial economet...
2024-11-13
代做econ 2331: economic and ...
2024-11-13
代做cs770/870 assignment 8代...
2024-11-13
代写amath 481/581 autumn qua...
2024-11-13
代做ccc8013 the process of s...
2024-11-13
代写csit040 – modern comput...
2024-11-13
代写econ 2070: introduc2on t...
2024-11-13
代写cct260, project 2 person...
2024-11-13
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!