[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