diff options
author | Yann Herklotz <git@yannherklotz.com> | 2021-09-09 18:53:11 +0100 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2021-09-09 18:53:41 +0100 |
commit | a671d8b8fe766d592650623e456a6c68bb6929f9 (patch) | |
tree | 5ea2dba6e4cf407af261f71c3a506a6a69588866 /algorithm.tex | |
parent | 7bbb64542b8897ae82f83b947a05d772579d06a3 (diff) | |
download | oopsla21_fvhls-a671d8b8fe766d592650623e456a6c68bb6929f9.tar.gz oopsla21_fvhls-a671d8b8fe766d592650623e456a6c68bb6929f9.zip |
Backend to back end
Diffstat (limited to 'algorithm.tex')
-rw-r--r-- | algorithm.tex | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/algorithm.tex b/algorithm.tex index 06cf110..5fee4db 100644 --- a/algorithm.tex +++ b/algorithm.tex @@ -81,7 +81,7 @@ The main work flow of \vericert{} is given in Figure~\ref{fig:rtlbranch}, which We select CompCert's three-address code (3AC)\footnote{This is known as register transfer language (RTL) in the \compcert{} literature. `3AC' is used in this paper instead to avoid confusion with register-transfer level (RTL), which is another name for the final hardware target of the HLS tool.} as the starting point. Branching off \emph{before} this point (at CminorSel or earlier) denies \compcert{} the opportunity to perform optimisations such as constant propagation and dead code elimination, which, despite being designed for software compilers, have been found useful in HLS tools as well~\cite{cong+11}. And if we branch off \emph{after} this point (at LTL or later) then \compcert{} has already performed register allocation to reduce the number of registers and spill some variables to the stack; this transformation is not required in HLS because there are many more registers available, and these should be used instead of RAM whenever possible. %\JP{``\compcert{} performs register allocation during the translation to LTL, with some registers spilled onto the stack: this is unnecessary in HLS since as many registers as are required may be described in the output RTL.''} \JP{Maybe something about FPGAs being register-dense (so rarely a need to worry about the number of flops)?} 3AC is also attractive because it is the closest intermediate language to LLVM IR, which is used by several existing HLS compilers. %\JP{We already ruled out LLVM as a starting point, so this seems like it needs further qualification.}\YH{Well not because it's not a good starting point, but the ecosystem in Coq isn't as good. I think it's still OK here to say that being similar to LLVM IR is an advantage?} -It has an unlimited number of pseudo-registers, and is represented as a control flow graph (CFG) where each instruction is a node with links to the instructions that can follow it. One difference between LLVM IR and 3AC is that 3AC includes operations that are specific to the chosen target architecture; we chose to target the x86\_32 backend because it generally produces relatively dense 3AC thanks to the availability of complex addressing modes.% reducing cycle counts in the absence of an effective scheduling approach. +It has an unlimited number of pseudo-registers, and is represented as a control flow graph (CFG) where each instruction is a node with links to the instructions that can follow it. One difference between LLVM IR and 3AC is that 3AC includes operations that are specific to the chosen target architecture; we chose to target the x86\_32 back end because it generally produces relatively dense 3AC thanks to the availability of complex addressing modes.% reducing cycle counts in the absence of an effective scheduling approach. \subsection{An introduction to Verilog} |