[LLVMdev] Invalid intrinsic name error
aditya vishnubhotla
vvaditya12 at yahoo.com
Wed Feb 20 06:20:45 PST 2008
Hi,
Thank You for the advice and we were able to solve
that problem by the following modifications to the
Instrinsics.td file.
But I now have an "Invalid Intrinsic name" error
This error occurs presumably because the created
intrinsic is named:
llvm.migrate_begin.i32
Intrinsics.gen checks for a string length of 18
(i.e. the length without the .i32).
Kindly help me through it.
//Additions made to Intrinsics.td file:
def int_migrate_begin :
Intrinsic<[llvm_i32_ty,llvm_vararg_ty],
[IntrWriteMem],"llvm.migrate_begin">;
//A section of the code which deals with the
//"migrate_begin" intrinsic creation is as follows:
const Type **Tys=(const
Type**)calloc(extTys.size(),sizeof(Type*));
/*extTys vector contains function type of the
function "f" */
int i=0;
for(vector<const Type*>::iterator
it=extTys.begin(),e=extTys.end();it!=e;it++)
{Tys[i++]=*it;}
extTys.clear();
Module *M = bbp->getParent()->getParent();
Function *f =
Intrinsic::getDeclaration(M,Intrinsic::migrate_begin,Tys,i);
/* migrate_begin intrinsic creation */
CallInst* CI = new CallInst(f,"migrate_begin");
//Error:
NAME:llvm.migrate_begin.i32
opt: Function.cpp:293: unsigned int
llvm::Function::getIntrinsicID(bool)
const: Assertion `noAssert && "Invalid LLVM intrinsic
name"' failed.
P.S:
> --- Dan Gohman <gohman at apple.com> wrote:
> On Feb 19, 2008, at 1:11 AM, aditya vishnubhotla
>
> wrote:
> > Hi,
> > I tried creating variable argument intrinsics
>
> which
>
> > are to be placeholders for some instructions
which
> > should not be executed by the backend.
> >
> > Kindly help me with the errors in my
>
> "migrate_begin"
>
> > intrinsic creation
> >
> > //Additions made to Intrinsics.td file:
> >
> > def llvm_migrate_begin : LLVMType<iAny>;
> > def int_migrate_begin :
> > Intrinsic<[llvm_migrate_begin,llvm_vararg_ty],
> > [IntrWriteMem],"llvm.migrate_begin">;
>
> This says that the return type is overloaded
> (because it's iAny). But
> that's
> the only overloaded part here; using variadic
> > argument lists is
> different
> from overloading.
>
> > Overloaded intrinsic has incorrect suffix:
>
> '.i32.i32'.
>
> > It should be '.i32'
> > i32 (...)* @llvm.migrate_begin.i32.i32
> >
> > Overloaded intrinsic has incorrect suffix:
> > '.i32.i32.i32'. It should be '.i32'
> > i32 (...)* @llvm.migrate_begin.i32.i32.i32
>
> The suffix has a part for each overloaded type in
> the function type.
> Since only
> the return type is overloaded, the verifier is
> expecting only one type
> to be passed
> into getDeclaration.
>
> Dan
____________________________________________________________________________________
Never miss a thing. Make Yahoo your home page.
http://www.yahoo.com/r/hs
More information about the llvm-dev
mailing list