virtual std::vector<Value *> getESetArgumentosFunc(Function *F){
std::vector<Value *> varg_list;
varg_list.clear();
for(Function::arg_iterator arg_iti = F->getArgumentList().begin(), arg_ite
F->getArgumentList().end(); arg_iti != arg_ite; ++arg_iti){
Value *para = ConstantInt::get(IntegerType::get(getGlobalContext(),32), 0);
*Value *val2 = cast<* arg_iti->getType()*>(para);
<--------------------------*
para->setName("test");
varg_list.push_back(para);
}
return varg_list;
}
How can I make this cast??
2011/10/6 John Criswell <criswell at illinois.edu>
> On 10/6/11 11:48 AM, Rafael Baldiati Parizi wrote:
>
> Hello,
> I need create a CallInst to this function
>
> define i32 @function(i32 %n, i8 %m){ ... }
>
> I now how get argument's type but I do not know how to create
arguments
> that meet these types.
> For example, if the argument is long, accurate pass CallInst an integer
> argument, however, if a Char, Char must pass an argument.
> How to get the type of the argument of the function definition and create
> the same type to pass the Callinst???
>
>
> If you want to pass a value to a function that doesn't match the type,
you
> will need to insert a cast instruction to cast the value to the correct
> type. Which cast instruction you insert will depend on the value's
type and
> the type you want it to be.
>
> SAFECode has a utility function castTo() that takes a Value * and a desired
> Type * and inserts a cast instruction if Value * is not of the desired
> type. It's designed to minimize the number of cast instructions it
inserts
> so that the resulting LLVM IR is more readable for debugging:
>
>
>
http://llvm.org/viewvc/llvm-project/safecode/trunk/include/safecode/Utility.h?view=markup
>
> -- John T.
>
>
>
> --
> *Rafael Parizi*
>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing listLLVMdev at cs.uiuc.edu
http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
--
*Rafael Parizi*
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20111006/62474465/attachment.html>
On 10/6/11 12:40 PM, Rafael Baldiati Parizi wrote:> virtual std::vector<Value *> getESetArgumentosFunc(Function *F){ > std::vector<Value *> varg_list; > varg_list.clear(); > for(Function::arg_iterator arg_iti = F->getArgumentList().begin(), > arg_ite = F->getArgumentList().end(); arg_iti != arg_ite; ++arg_iti){ > Value *para = > ConstantInt::get(IntegerType::get(getGlobalContext(),32), 0); > *Value *val2 = cast<* arg_iti->getType()*>(para); > <--------------------------* > para->setName("test"); > varg_list.push_back(para); > } > return varg_list; > } > > How can I make this cast??I think you misunderstood me. You need to *insert* an LLVM cast instruction. For example, you might insert the following code: Value *para = ConstantInt::get(IntegerType::get(getGlobalContext(),32), 0); Value * Val2 = CastInst::CreateZExtOrBitCast (para, arg_iti->getType(), "test", InsertPt) ... where InsertPt is an Instruction * specifying where to insert the cast instruction. Having said that, if all you're doing is inserting zero values of the appropriate type, it might be easier to use: Value * Val2 = Constant::getNullValue (arg_iti->getType()); -- John T.> > > 2011/10/6 John Criswell <criswell at illinois.edu > <mailto:criswell at illinois.edu>> > > On 10/6/11 11:48 AM, Rafael Baldiati Parizi wrote: >> Hello, >> I need create a CallInst to this function >> >> define i32 @function(i32 %n, i8 %m){ ... } >> >> I now how get argument's type but I do not know how to create >> arguments that meet these types. >> For example, if the argument is long, accurate pass CallInst an >> integer argument, however, if a Char, Char must pass an argument. >> How to get the type of the argument of the function definition >> and create the same type to pass the Callinst??? > > If you want to pass a value to a function that doesn't match the > type, you will need to insert a cast instruction to cast the value > to the correct type. Which cast instruction you insert will > depend on the value's type and the type you want it to be. > > SAFECode has a utility function castTo() that takes a Value * and > a desired Type * and inserts a cast instruction if Value * is not > of the desired type. It's designed to minimize the number of cast > instructions it inserts so that the resulting LLVM IR is more > readable for debugging: > > http://llvm.org/viewvc/llvm-project/safecode/trunk/include/safecode/Utility.h?view=markup > > -- John T. > >> >> >> -- >> */Rafael Parizi/* >> >> >> >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > -- > */Rafael Parizi/* > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111006/52f78112/attachment.html>
John, I needed just this: Value * Val2 = Constant::getNullValue (arg_iti->getType()); Thanks. 2011/10/6 John Criswell <criswell at illinois.edu>> On 10/6/11 12:40 PM, Rafael Baldiati Parizi wrote: > > virtual std::vector<Value *> getESetArgumentosFunc(Function *F){ > std::vector<Value *> varg_list; > varg_list.clear(); > for(Function::arg_iterator arg_iti = F->getArgumentList().begin(), > arg_ite = F->getArgumentList().end(); arg_iti != arg_ite; ++arg_iti){ > Value *para = ConstantInt::get(IntegerType::get(getGlobalContext(),32), > 0); > *Value *val2 = cast<* arg_iti->getType()*>(para); > <--------------------------* > para->setName("test"); > varg_list.push_back(para); > } > return varg_list; > } > > How can I make this cast?? > > > I think you misunderstood me. You need to *insert* an LLVM cast > instruction. For example, you might insert the following code: > > > Value *para = ConstantInt::get(IntegerType::get(getGlobalContext(),32), 0); > Value * Val2 = CastInst::CreateZExtOrBitCast (para, arg_iti->getType(), > "test", InsertPt) > > ... where InsertPt is an Instruction * specifying where to insert the cast > instruction. > > Having said that, if all you're doing is inserting zero values of the > appropriate type, it might be easier to use: > > Value * Val2 = Constant::getNullValue (arg_iti->getType()); > > -- John T. > > > > > 2011/10/6 John Criswell <criswell at illinois.edu> > >> On 10/6/11 11:48 AM, Rafael Baldiati Parizi wrote: >> >> Hello, >> I need create a CallInst to this function >> >> define i32 @function(i32 %n, i8 %m){ ... } >> >> I now how get argument's type but I do not know how to create arguments >> that meet these types. >> For example, if the argument is long, accurate pass CallInst an integer >> argument, however, if a Char, Char must pass an argument. >> How to get the type of the argument of the function definition and create >> the same type to pass the Callinst??? >> >> >> If you want to pass a value to a function that doesn't match the type, >> you will need to insert a cast instruction to cast the value to the correct >> type. Which cast instruction you insert will depend on the value's type and >> the type you want it to be. >> >> SAFECode has a utility function castTo() that takes a Value * and a >> desired Type * and inserts a cast instruction if Value * is not of the >> desired type. It's designed to minimize the number of cast instructions it >> inserts so that the resulting LLVM IR is more readable for debugging: >> >> >> http://llvm.org/viewvc/llvm-project/safecode/trunk/include/safecode/Utility.h?view=markup >> >> -- John T. >> >> >> >> -- >> *Rafael Parizi* >> >> >> >> >> >> _______________________________________________ >> LLVM Developers mailing listLLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >> >> > > > -- > *Rafael Parizi* > > > > >-- *Rafael Parizi* -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111006/d4fd2ca3/attachment.html>