Jin Huang
2013-Dec-20 08:35 UTC
[LLVMdev] A problem about convert a string to a *i8 pointer
Hello! Nearly, I write a pass to add an call "printf" instructions before every instruction in a .bc file,which prints the opcode of every instruction before the instruction executed. While passing the opcode to the printf fucntion ,I used such way to convert the string to i8* (the same as http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-September/053206.html does): StringRef s = ins_temp->getOpcodeName(); //ins_temp is an Instruction* type Constant *to_be_print = ConstantDataArray::getString(ctx, s); GlobalVariable *g_print = new GlobalVariable(M, to_be_print->getType(), true, GlobalValue::InternalLinkage, to_be_print, "print_str"); Constant *zero = Constant::getNullValue(llvm::IntegerType::getInt32Ty(ctx)); // what's the function of the three line code below? std::vector<llvm::Constant*> indices; indices.push_back(zero); indices.push_back(zero); Constant *test_var = ConstantExpr::getGetElementPtr(g_print,indices); and then I use CallInst *call = builder.CreateCall2(call_print_ptr,var_ref,test_var); to create the instruction and insert it. The method works well .But I didn't know the function of the std::vector<llvm::Constant*> indices; indices.push_back(zero); indices.push_back(zero); is that just create a arrayRef that can be the parameter of the getGetElementPtr() function ? Does it has anything to do with getting the pointer to the string ? Thank you ! -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131220/cded26bc/attachment.html>
Reasonably Related Threads
- Scope Confusion - Controller iVars in Modules
- [LLVMdev] Add call printf instructions problems
- [LLVMdev] Add call printf instructions problems
- Getting a pointer to a i8 from a global variable that holds a constant string
- [LLVMdev] Add call printf instructions problems