Open andorp opened 4 years ago
Currently I am working on the first stage, where the PrimOps.hs is defined in the Idris-GRIN-Backend repository and uses a PureEvalPlugin. I sketched the implementation in the https://github.com/grin-compiler/grin/pull/65 PR. But in the long run I would like to implement the rest of the stages too.
Looks great.
My plan was to remove the GRIN primop prelude completely. Then add LLVM primops that are understood by the LLVM codegen.
I think these goals are not contradictory. We can implement the PrimOps based on the LLVM ones once they introduced.
Currently I am working with the test suite found in Idris-Dev. At this stage I need the PrimOp abstraction for the Idris-GRIN-backend to not to pollute the PrimOps in the GRIN repository. At the next stage I can start to work on adding the primops from LLVM to the GRIN. After that full featured LLVM codegen for the Idris repository could be implemented.
The GRIN frontends should not depend on the built-in evaluation of the primitive operations. Currently we are able to define the ffi and primitive operations, but their interpretation are still tied to the Reducer.Eval, Reducer.LLVM.CodeGen modules.
The use case: I as a frontend developer, want to create my own primitive operations which suits the best to the compiler I work on. To do that, I have to define the set or primitives. Those primitives configured in the ffi/pure section in my GRIN prelude.
Stages: