[LLVMdev] Adding Intrinsics for custom processor (frotend problem)
Luke Dalessandro
luked at cs.rochester.edu
Tue Mar 3 06:30:43 PST 2009
Richard Osborne wrote:
> Personally I would just modify the frontend - it's not that hard once
> you know where to look . In this case all you need to do is add the
> declaration of your builtin to the TARGET_INIT_BUILTINS target hook (see
> the gcc internals manual) defined in the gcc/config directory
> corresponding to your target. If the name the the declaration matches
> the name used with GCCBuiltin in the intrinsics td file then any calls
> to the gcc builtin in the source should get automatically translated to
> the calls to the LLVM intrinsic.
Gil, this sounds like a much easier strategy than mine for your
target-specific approach. The builtins that I added for my own purpose
aren't target specific, they're more along the lines of the OpenMP stuff
so I was looking for a general place to put them.
Luke
>
> Gil Dogon wrote:
>> As mentioned in an earlier mail, I am working on an LLVM backend for a
>> custom processor based on MIPS.
>> My problem is how to extend LLVM to support some esoteric/non-standard
>> feature of the underlying hardware.
>> I saw in the "Extending LLVM" document, that the easiest / most common
>> way to do this was using an intrinsic function,
>> and examples of the technique abound (all SSE for example).
>> My problem though as mentioned before is that the frontend support for
>> intrinsics, is undocumented, and implemented
>> in llvm-gcc which I prefer not to hack with (I use a binary
>> precompiled one). As far as I could see it supports the
>> intrinsics using gcc style __builtin_ function names.
>>
>> Currently what I think to do , is the following :
>>
>> 1. Define my intrinsics in a special (which would be preincluded in our
>> build system) .h file (using whatever name convention I want)
>> 2. Then I need to add a pass to llvm which will translate the names of
>> those intrinsics to llvm style names , since
>> LLVM intrinsics start with "llvm." which makes them non legal as "C"
>> identifiers.
>>
>> I have two questions :
>>
>> 1. Is that the right way to go, or is there a simpler/more standard way
>> to have frontend support for new architecture intrinsics ?
>>
>> 2. If thats the simplest way , I would like to have a quick advice on
>> how to write the rather trivial pass described in '2'.
>> I guess that I need to replace a given Function object with an
>> allmost identical one, but with a different name (the "llvm.something' name
>> of the intrisic) What is the correct code to do this ?
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
>
More information about the llvm-dev
mailing list