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

Henning Thielemann llvm at henning-thielemann.de
Wed May 23 15:38:13 PDT 2012


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++. This would not be a big 
problem, since I could let it write C++ code that in turn writes Haskell code.

Unfortunately the section
   "http://llvm.org/docs/TableGenFundamentals.html#backends"
  is not yet written.

Is it possible to use the llvm-tblgen binary without modification or do I have 
to extend llvm-tblgen or do I have to write my own C++ code that uses some of 
the functions from the tblgen library? Are there any (simple) examples of 
custom tblgen backends?



More information about the llvm-dev mailing list