Currently, some of the code generation and dataflow analysis in ThrillerFlow are mixed together, which is not conducive to the scalability of the system architecture.
To support code generation for multiple backends, it is necessary to encapsulate primitives within different backends. At the same time, to enable code generation for different backends within a single graph pass, a Backend Trait have to be provided to maintain a consistent underlying library abstraction.