Creation of Intrinsics with Pointer Return Types

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Creation of Intrinsics with Pointer Return Types

aditya vishnubhotla
Hi,
I tried creating intrinsics which are to be
placeholders for a  set of instructions (actually a section of a basic block) to be executed elsewhere(for e.g. in HW).
These intrinsics are to take care of the data dependencies of the set of instructions being replaced by them.
In the process I created a "migrate_begin" variable argument intrinsic which handles the incoming data dependenices to these set of instructions.
Entry  in the  Intrinsics.td file:
def int_migrate_begin : Intrinsic<[llvm_i32_ty,llvm_vararg_ty],[IntrWriteMem],"llvm.migrate_begin">;
   
I want to replace the instructions from this set , having outgoing data dependencies, with " migrate_end " intrinsic instructions.
I created two migrate_end intrinsics with return types anyint(iAny Value Type) and any float(fAny Value Type).
Entries  in the Intrinsics.td file:
def int_migrate_end_int : Intrinsic<[llvm_anyint_ty,llvm_i32_ty,llvm_i32_ty],[IntrWriteMem],"llvm.migrate_end_int">;
def int_migrate_end_float : Intrinsic<[llvm_anyfloat_ty,llvm_i32_ty,llvm_i32_ty],[IntrWriteMem],"llvm.migrate_end_float">;

I am not able to handle all of the pointer return type instructions.

I tried using the types such as:

def llvm_vararg_ty     : LLVMType<isVoid>;   // this means vararg here
def llvm_iPTR_ty       : LLVMType<iPTR>
def llvm_descriptor_ty : LLVMPointerType<llvm_empty_ty>;   
and adding  types
def llvm_ptriAny_ty    : LLVMPointerType<llvm_anyint_ty>;            
def llvm_ptrfAny_ty    : LLVMPointerType<llvm_anyfloat_ty>;

but in vain.  
I would be happy to know the type or types required for handling a pointer return type for an LLVM instruction, to create the "migrate_end" intrinsic.

Thank You,
Aditya
 



Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now.
_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Reply | Threaded
Open this post in threaded view
|

Re: Creation of Intrinsics with Pointer Return Types

Dan Gohman-2
Hello,

LLVM's intrinsic overloading mechanism does not currently support
overloading on pointer types. Patches to implement this would be
welcome.

Dan

On May 7, 2008, at 9:25 AM, aditya vishnubhotla wrote:

> Hi,
> I tried creating intrinsics which are to be
> placeholders for a  set of instructions (actually a section of a  
> basic block) to be executed elsewhere(for e.g. in HW).
> These intrinsics are to take care of the data dependencies of the  
> set of instructions being replaced by them.
> In the process I created a "migrate_begin" variable argument  
> intrinsic which handles the incoming data dependenices to these set  
> of instructions.
> Entry  in the  Intrinsics.td file:
> def int_migrate_begin : Intrinsic<[llvm_i32_ty,llvm_vararg_ty],
> [IntrWriteMem],"llvm.migrate_begin">;
>
> I want to replace the instructions from this set , having outgoing  
> data dependencies, with " migrate_end " intrinsic instructions.
> I created two migrate_end intrinsics with return types anyint(iAny  
> Value Type) and any float(fAny Value Type).
> Entries  in the Intrinsics.td file:
> def int_migrate_end_int :  
> Intrinsic<[llvm_anyint_ty,llvm_i32_ty,llvm_i32_ty],
> [IntrWriteMem],"llvm.migrate_end_int">;
> def int_migrate_end_float :  
> Intrinsic<[llvm_anyfloat_ty,llvm_i32_ty,llvm_i32_ty],
> [IntrWriteMem],"llvm.migrate_end_float">;
>
> I am not able to handle all of the pointer return type instructions.
>
> I tried using the types such as:
>
> def llvm_vararg_ty     : LLVMType<isVoid>;   // this means vararg here
> def llvm_iPTR_ty       : LLVMType<iPTR>
> def llvm_descriptor_ty : LLVMPointerType<llvm_empty_ty>;
> and adding  types
> def llvm_ptriAny_ty    : LLVMPointerType<llvm_anyint_ty>;
> def llvm_ptrfAny_ty    : LLVMPointerType<llvm_anyfloat_ty>;
>
> but in vain.
> I would be happy to know the type or types required for handling a  
> pointer return type for an LLVM instruction, to create the  
> "migrate_end" intrinsic.
>
> Thank You,
> Aditya
>
>
>
> Be a better friend, newshound, and know-it-all with Yahoo! Mobile.  
> Try it now. _______________________________________________
> LLVM Developers mailing list
> [hidden email]         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Reply | Threaded
Open this post in threaded view
|

Re: Creation of Intrinsics with Pointer Return Types

Gordon Henriksen-3
I'm not sure how you'd encode the pointer type name in the type.

Another option is bitcast pointers to some fixed type. i8* is a good  
choice. The GC intrinsics do this.

On May 7, 2008, at 14:28, Dan Gohman wrote:

> Hello,
>
> LLVM's intrinsic overloading mechanism does not currently support
> overloading on pointer types. Patches to implement this would be
> welcome.
>
> Dan
>
> On May 7, 2008, at 9:25 AM, aditya vishnubhotla wrote:
>
>> Hi,
>> I tried creating intrinsics which are to be
>> placeholders for a  set of instructions (actually a section of a
>> basic block) to be executed elsewhere(for e.g. in HW).
>> These intrinsics are to take care of the data dependencies of the
>> set of instructions being replaced by them.
>> In the process I created a "migrate_begin" variable argument
>> intrinsic which handles the incoming data dependenices to these set
>> of instructions.
>> Entry  in the  Intrinsics.td file:
>> def int_migrate_begin : Intrinsic<[llvm_i32_ty,llvm_vararg_ty],
>> [IntrWriteMem],"llvm.migrate_begin">;
>>
>> I want to replace the instructions from this set , having outgoing
>> data dependencies, with " migrate_end " intrinsic instructions.
>> I created two migrate_end intrinsics with return types anyint(iAny
>> Value Type) and any float(fAny Value Type).
>> Entries  in the Intrinsics.td file:
>> def int_migrate_end_int :
>> Intrinsic<[llvm_anyint_ty,llvm_i32_ty,llvm_i32_ty],
>> [IntrWriteMem],"llvm.migrate_end_int">;
>> def int_migrate_end_float :
>> Intrinsic<[llvm_anyfloat_ty,llvm_i32_ty,llvm_i32_ty],
>> [IntrWriteMem],"llvm.migrate_end_float">;
>>
>> I am not able to handle all of the pointer return type instructions.
>>
>> I tried using the types such as:
>>
>> def llvm_vararg_ty     : LLVMType<isVoid>;   // this means vararg  
>> here
>> def llvm_iPTR_ty       : LLVMType<iPTR>
>> def llvm_descriptor_ty : LLVMPointerType<llvm_empty_ty>;
>> and adding  types
>> def llvm_ptriAny_ty    : LLVMPointerType<llvm_anyint_ty>;
>> def llvm_ptrfAny_ty    : LLVMPointerType<llvm_anyfloat_ty>;
>>
>> but in vain.
>> I would be happy to know the type or types required for handling a
>> pointer return type for an LLVM instruction, to create the
>> "migrate_end" intrinsic.
>>
>> Thank You,
>> Aditya
>>
>>
>>
>> Be a better friend, newshound, and know-it-all with Yahoo! Mobile.
>> Try it now. _______________________________________________
>> LLVM Developers mailing list
>> [hidden email]         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
> _______________________________________________
> LLVM Developers mailing list
> [hidden email]         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev



— Gordon


_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev