struct例子測試流程

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章