[LLVMdev] Adding custom operation intrinsic for ASIP architectures.
Mikael Lepistö
mikael.lepisto at tut.fi
Thu Aug 2 03:16:32 PDT 2007
Chris Lattner wrote:
> On Wed, 1 Aug 2007, [UTF-8] Mikael Lepist? wrote:
>
>>> def MOVNTPSmr : PSI<0x2B, MRMDestMem, (outs), (ins i128mem:$dst,
>>> VR128:$src),
>>> "movntps {$src, $dst|$dst, $src}",
>>> [(int_x86_sse_movnt_ps addr:$dst, VR128:$src)]>;
>>>
>>> There is corresponding code in llvm-gcc to tell GCC how to handle this
>>> builtin. Is this what you're looking for?
>>>
>>>
>> Yes this is more or less, what we are looking for, except we need
>> variable arguments for out intrinsic. I assume that it can be achieved
>> by using llvm_vararg_ty as a argument type?
>>
>
> Sure, that can be done. What sort of operations require variable
> arguments? It might be better implemented with pattern matching in the
> code generator than as an intrinsic.
>
Need for variable arguments is that we don't know beforehand
which custom operations we support. So practically we just
give operation name and 1 or more parameters depending
how many parameters custom operation has.
e.g. __custom_operation("addsub", a, b, c)
In lowering of intrinsic function we check from the processor,
which type of parameters our current processor has for operation
named "addsub" and write corresponding native code.
>> Is there need to make changes to llvm-gcc for supporting new GCCBuiltin
>> types that I define or are all of them automatically converted to
>> intrinsics on gcc side?
>>
>
> No, unfortunately you also have to use the GCC builtin mechanism to teach
> gcc about them.
>
I already made optimizer pass for transforming certain function name
to intrinsic function. For me it seemed to be a lot easier choice.
Mikael Lepistö
More information about the llvm-dev
mailing list