1、# Optimization Level 3 exec clang ${design}.c -emit-llvm -c -fno-builtin -O3 -fno-vectorize -fno-slp-vectorize -fno-unroll-loops -o ${design}_O3.bc
使用clang O3进行编译出BC
2、找到hw_flow.cc文件,将inline的OPT打开,并将下列代码注释掉。
#if 0
Optimizer opt;
opt.setOutputFileName("hw.bc");
opt.setNoOutput(false);
opt.optimize(module);
#endif
// llc -march=v ${name}.bc -o ${name}.v
Compiler llc;
llc.set_march("v");
llc.set_output_file_name(output);
bool success = llc.compile(module);
return success;
让其生成hw.bc,此时生成出来的bc文件没有function
3、通过我的rm_struct pass处理步骤得出的hw.bc文件,得到rm_struct.bc文件。
4、再打开上述注释文件,跑步骤3生成的bc文件,得到最终结果。
ESL_0.2 run.tcl
set design struct
set out_dir output
# Set device, which will load the specific *.tcl
set_device Virtex7
set_clock_period 10
#source legup.tcl
#source config.tcl
#exec ./mark_labels.pl ${design}.c > ${design}_labeled.c
#exec clang-3.5 ${design}_labeled.c -emit-llvm -pthread -c -fno-builtin -m32 -O3 -fno-vectorize -fno-slp-vectorize -mllvm -inline-threshold=-100 -o ${design}.bc
#exec clang ${design}.c -emit-llvm -c -fno-builtin -O0 -mllvm -inline-threshold=-100 -fno-inline -fno-vectorize -fno-slp-vectorize -o ${design}.bc
# Optimization Level 0
exec clang ${design}.c -emit-llvm -c -fno-builtin -O1 -mllvm -disable-llvm-optzns -o ${design}.bc
# Optimization Level 1
#exec clang ${design}.c -emit-llvm -c -g -O1 -o ${design}_O1.bc
#exec opt -always-inline ${design}.bc -o ${design}_inline.bc
#run_hybrid ${design}.bc
if {[file isdirectory $out_dir]} {
file delete -force $out_dir
}
file mkdir $out_dir
#run_hw ${design}_O1.bc
run_hw ${design}.bc
#run_hw 3d.bc
#run_hw a.o.3.bc
exec llvm-dis hw.bc
exec llvm-dis rm_struct.bc
首先处理未被优化的bc文件,在对经过rm_struct pass处理得出的bc进行opt -O3优化
clang struct.c -emit-llvm -c -O1 -mllvm -disable-llvm-optzns -o 12-9-temp1.bc
opt -O3 12-9-temp.bc -o out.bc
为了与vivado对比,${design}_O3.bc是需要的最终文件。
set design struct
set out_dir output
# Set device, which will load the specific *.tcl
set_device Virtex7
set_clock_period 10
#source legup.tcl
#source config.tcl
#exec ./mark_labels.pl ${design}.c > ${design}_labeled.c
#exec clang-3.5 ${design}_labeled.c -emit-llvm -pthread -c -fno-builtin -m32 -O3 -fno-vectorize -fno-slp-vectorize -mllvm -inline-threshold=-100 -o ${design}.bc
#exec clang ${design}.c -emit-llvm -c -fno-builtin -O0 -mllvm -inline-threshold=-100 -fno-inline -fno-vectorize -fno-slp-vectorize -o ${design}.bc
# Optimization Level 0
# exec clang ${design}.c -emit-llvm -c -fno-builtin -O1 -mllvm -disable-llvm-optzns -o ${design}.bc
# Optimization Level 1
#exec clang ${design}.c -emit-llvm -c -g -O1 -o ${design}_O1.bc
#exec opt -always-inline ${design}.bc -o ${design}_inline.bc
#run_hybrid ${design}.bc
# Optimization Level 3
exec clang ${design}.c -emit-llvm -c -fno-builtin -O3 -fno-vectorize -fno-slp-vectorize -fno-unroll-loops -o ${design}_O3.bc
exec clang ${design}.c -emit-llvm -c -fno-builtin -O1 -mllvm -disable-llvm-optzns -fno-vectorize -fno-slp-vectorize -fno-unroll-loops -o ${design}_O1.bc
#exec clang ${design}.c -emit-llvm -c -fno-builtin -O1 -mllvm -disable-llvm-optzns -o ${design}.bc
if {[file isdirectory $out_dir]} {
file delete -force $out_dir
}
file mkdir $out_dir
#run_hw ${design}_O1.bc
#run_hw ${design}_O3.bc
#run_hw hw.bc
#run_hw 3d.bc
#run_hw a.o.3.bc
exec llvm-dis hw.bc
exec llvm-dis rm_struct.bc
opt struct_O1.bc -O3 -disable-loop-unrolling -disable-slp-vectorization -o 12-10-temp-O1.bc
-disable-loop-vectorization
-disable-tail-calls