Open fyquah opened 3 years ago
We have an example using another front-end in https://github.com/triSYCL/sycl, look at the sycl/unified/next
branch and how v++
is fed from the Clang driver with some LLVM bitcode.
Unfortunately it is not a small sample code...
There is some doc in https://github.com/triSYCL/sycl/blob/sycl/unified%2Fnext/sycl/doc/Xilinx_sycl_compiler_architecture.rst
At least you can see how v++
is used with this script https://github.com/triSYCL/sycl/blob/sycl/unified/next/sycl/tools/sycl-xocc/bin/sycl-xocc
This script shows for example how we use the xoccIRDowngrader
to feed v++
with some LLVM IR generated by the latest LLVM. This pass is in https://github.com/triSYCL/sycl/blob/sycl/unified/next/llvm/lib/SYCL/XOCCIRDowngrader.cpp
If you improve this process, keep the triSYCL team posted so we can benefit from your experience! :-)
If your generated LLVM IR is in 7.0 format, you can leverage the plugin with ::LLVM_CUSTOM_INPUT to pick up the your generated one and then utilizing the ::LLVM_CUSTOM_OUTPUT to pass it downwards to the flow. Else you will need to have an IR transformer for translating different version LLVM IR to the LLVM 7.0 IR, and call it before the plugin or add it into the plugin. Above triSYCL xoccIRDowngrader
is another way to go for feeding v++
higher version of LLVM IR.
@yu810226 Could you point me please to an example on how to pass LLVM 7.0 IR downwards in the flow. Also do I still need to load C++/v++ or similar into my tcl script? Thank you very much!
Our scripts and passes have been renamed to match the new Vitis/v++
tool names:
@yu810226 I'm trying to do something similar too and I was wondering if you could provide an example of how to pass LLVM 7.0 downwards the flow? maybe a simple .tcl script? Thank you very much!
If the LLVM you have is compatible in version with HLS's LLVM IR, you don't need to go through sycl_vxx.py(maybe you even cant) what you can simply do assuming you ir is in kernel.ll is:
.xpirbc is the "magic" extension sycl_vxx.py uses under the hood to feed LLVM IR to v++
all the other stuff sycl_vxx.py does is about downgrading IR, lowering sycl annotation into HLS annotations and removing code pattern HLS has a hard time with.
Hello @rgioiosa78 , The LLVM_CUSTOM_INPUT could be set to be your input.bc. And you would need the dummy source file for an empty kernel that's with the function signature met the one you your input.bc.
The tcl file would be similar to below with above mentioned change. https://github.com/Xilinx/HLS/blob/main/vitis_hls_examples/override_opt_flow_demo/run_hls.tcl
Hello @rgioiosa78 , The LLVM_CUSTOM_INPUT could be set to be your input.bc. And you would need the dummy source file for an empty kernel that's with the function signature met the one you your input.bc.
The tcl file would be similar to below with above mentioned change. https://github.com/Xilinx/HLS/blob/main/vitis_hls_examples/override_opt_flow_demo/run_hls.tcl
@yu810226 I tried this method but Vitis HLS complains that the top function is not found.
I am thinking of working on a tool that generate a custom HLS front-end which generates HLS-friendly LLVM-bitcode, and leverage plugins + vitis_hls backend for optimization passes and RTL generation.
How can I pass the generated bit files into the HLS compilation flow?