CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
81 lines
2.4 KiB
TeX
81 lines
2.4 KiB
TeX
\subsection{Class Assignment}
|
|
\label{sec:assign}
|
|
\definedin{Absloc.h}
|
|
|
|
An assignment represents data dependencies between an output abstract region
|
|
that is modified by this instruction and several input abstract regions that are
|
|
used by this instruction. An instruction may modify several abstract regions,
|
|
so an instruction can correspond to multiple assignments.
|
|
|
|
|
|
\begin{apient}
|
|
typedef boost::shared_ptr<Assignment> Ptr;
|
|
\end{apient}
|
|
\apidesc{Shared pointer for Assignment class.}
|
|
|
|
\begin{apient}
|
|
const std::vector<AbsRegion> &inputs() const;
|
|
std::vector<AbsRegion> &inputs();
|
|
\end{apient}
|
|
\apidesc{Return the input abstract regions.}
|
|
|
|
\begin{apient}
|
|
const AbsRegion &out() const;
|
|
AbsRegion &out();
|
|
\end{apient}
|
|
\apidesc{Return the output abstract region.}
|
|
|
|
\begin{apient}
|
|
InstructionAPI::Instruction::Ptr insn() const;
|
|
\end{apient}
|
|
\apidesc{Return the instruction that contains this assignment.}
|
|
|
|
\begin{apient}
|
|
Address addr() const;
|
|
\end{apient}
|
|
\apidesc{Return the address of this assignment.}
|
|
|
|
\begin{apient}
|
|
ParseAPI::Function *func() const;
|
|
\end{apient}
|
|
\apidesc{Return the function that contains this assignment.}
|
|
|
|
\begin{apient}
|
|
ParseAPI::Block *block() const;
|
|
\end{apient}
|
|
\apidesc{Return the block that contains this assignment.}
|
|
|
|
\begin{apient}
|
|
const std::string format() const;
|
|
\end{apient}
|
|
\apidesc{Return the string representation of this assignment.}
|
|
|
|
|
|
\subsection{Class AssignmentConverter}
|
|
\label{sec:assignmentcovnert}
|
|
\definedin{AbslocInterface.h}
|
|
|
|
This class should be used to convert instructions to assignments.
|
|
|
|
\begin{apient}
|
|
AssignmentConverter(bool cache, bool stack = true);
|
|
\end{apient}
|
|
\apidesc{Construct an AssignmentConverter.
|
|
When \code{cache} is \code{true}, this object
|
|
will cache the conversion results for converted instructions. When \code{stack}
|
|
is \code{true}, stack analysis is used to distinguish stack variables at
|
|
different offset. When \code{stack} is \code{false}, the stack is treated as a
|
|
single memory region.}
|
|
|
|
\begin{apient}
|
|
void convert(InstructionAPI::Instruction::Ptr insn,
|
|
const Address &addr,
|
|
ParseAPI::Function *func,
|
|
ParseAPI::Block *blk,
|
|
std::vector<Assignment::Ptr> &assign);
|
|
\end{apient}
|
|
\apidesc{Convert instruction \code{insn} to assignments and return these
|
|
assignments in \code{assign}. The user also needs to provide the context of
|
|
\code{insn}, including its address \code{addr}, function \code{func}, and block
|
|
\code{blk}.}
|