[llvm-dev] define intrinsic function with pointer-typed parameter
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Tue Mar 22 13:50:42 PDT 2016
It sounds like you're hitting the default case in
SelectionDAGBuilder::visitIntrinsicCall and exercising the
visitTargetIntrinsic code path. I haven't dug into the default handling
there, but that's probably what you need to look at. Depending on your
intrinsic, you might also consider adding custom handling in
visitIntrinsicCall itself.
On 03/21/2016 04:33 PM, Xiangyang Guo via llvm-dev wrote:
> Hi,
>
> If I define a intrinsic function with pointer-typed parameter, for
> example,
> def llvm_foo_ptr_ty : LLVMPointerType<llvm_i16_ty>;
> def int_foo_get : Intrinsic<[llvm_foo_ptr_ty], [llvm_foo_ptr_ty,
> llvm_i32_ty], [IntrReadArgMem]>;
>
> How to lower it for the backend? I'm not sure what kind of register
> (i16 or i32 or i32) is needed in this case? If the parameter is
> LLVMPointerType<llvm_i32_ty> instead of LLVMPointerType<llvm_i16_ty>,
> will this make difference for the backend? Suppose my backend has
> three types of register: i16, i32, i64.
>
> When I check the debug information, I can see LLVM tries to use i32 to
> lower the parameter to build SDAG. But why it chooses i32 instead of i64?
This sounds like your target isn't telling the canonicalization logic
i16 is a valid register type or that the cost of i32 register is much
less than an i16. However, I'm no expert in the backend stuff, so take
my comment with a grain of salt.
>
> Any input is appreciable.
>
> Regards,
>
> Xiangyang
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160322/19e47d67/attachment.html>
More information about the llvm-dev
mailing list