[llvm-dev] Help wanted: Overloading an Intinsic

David Noursi via llvm-dev llvm-dev at lists.llvm.org
Tue Jul 26 15:21:52 PDT 2016


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160726/a13f9f35/attachment.html>


More information about the llvm-dev mailing list