[llvm-dev] Help wanted: Overloading an Intinsic

Anna Thomas via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 28 16:18:28 PDT 2016


Hi David,

The error shows that the clang source code uses this intrinsic as well, but in the old form. You need to modify the clang source code (where this intrinsic is used) to consider the overloaded operands. 

The assert would show the trace where clang uses this intrinsic.

Hope this helps,
Anna

> On Jul 26, 2016, at 3:21 PM, David Noursi via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hello All,
> 
> I have been modifying LLVM a project of mine, and have encountered issues with overloading an intrinsic function. 
> 
> I have defined two types, abit (which is mapped, in Intrinsics.td, to i128) and qbit (accordingly mapped to i16). I would like my intrinsic function, CNOT(x,y), to accept either an abit or a qbit for each argument, so I overload with iAny and llvm_anyint_ty, as seemed to be the method for other intrinsics:
> 
> def int_CNOT: Intrinsic<[], [llvm_anyint_ty, llvm_anyint_ty],[],["llvm.CNOT"]>; 
> 
> My llvm/clang directory builds successfully, but I get an error on getType from clang, which I believe is rooted in my llvm code. My question is simply, are there any additional steps to overloading an intrinsic? I stand to believe there is more to be done than what I did in the one line above, but I cannot find where to do this.
> 
> For what its worth, I get this error in generating the initial IR through clang:
> 
> clang: ../ArrayRef.h:129: const T &llvm::ArrayRef<llvm::Type *>::operator[](size_t) const [T = llvm::Type *]: Assertion `Index < Length && "Invalid index!"' failed.
> 
> Many Thanks,
> David Noursi
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list