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