[LLVMdev] tblgen for generation of Haskell bindings to LLVM intrinsics

Sebastian Redl sebastian.redl at getdesigned.at
Thu May 24 01:37:40 PDT 2012


On 24.05.2012 00:38, Henning Thielemann wrote:
> I want to generate Haskell bindings to LLVM intrinsics. In a first attempt I
> wrote a little parser that reads IntrinsicsX86.td and outputs a Haskell module.
>
> E.g. the definition
>
>     def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">,
>           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
>                     llvm_v8f32_ty], [IntrNoMem]>;
>
> is turned into
>
>     maxpd256 :: Ext.T (V4Double ->  V4Double ->  LLVM.CodeGenFunction r V4Double)
>     maxpd256 = Ext.intrinsic ExtX86.avx "max.pd.256"
>
>
> This works for the flat structure of IntrinsicsX86.td, but e.g.
> IntrinsicsPowerPC.td uses tablegen classes.
>
> Now I wonder whether it is better to use tablegen to generate the Haskell code.
> The tblgen man page says, that tablegen emits C++.
It emits whatever text a particular backend decides to spit out. You 
would have to write your own backend anyway, so you can just make it 
emit Haskell code. Writing a backend isn't hard - a rather simple one to 
look at would be Clang's diagnostic generator (it's in the Clang tree).

Sebastian



More information about the llvm-dev mailing list