Can you please give an example of creating an instruction (for example add instructions with two operand a and b)? I am trying instruction() for a while, but no success yet. Duncan Sands wrote:> > Hi, > >> Actually i have to implement strength reduction, for that i have to first >> detect induction variables using ALLEN-COCKE-KENNEDY algorithm. To find >> out >> induction variables, i need the name of the instruction. > > I suspect you are confused. Surely you only need a way of referring to > each > instruction. For this you can use a pointer to the instruction. > > Ciao, > > Duncan. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- View this message in context: http://old.nabble.com/Operand%2C-instruction-tp21961718p28235150.html Sent from the LLVM - Dev mailing list archive at Nabble.com.
help__me_please wrote:> Can you please give an example of creating an instruction (for example add > instructions with two operand a and b)? I am trying instruction() for a > while, but no success yet. >You need to look for the appropriate subclass of llvm::Instruction and find the method for creating a new instruction. The method is usually a static method and takes arguments pointing to the values to use as operands. Doxygen is your best resource for finding these methods. For example, if you look at http://llvm.org/doxygen/classllvm_1_1AllocaInst.html, you can see that the AllocaInst class (which represents an alloca instruction) has a standard constructor method that takes the type of object to allocate, the name of the new alloca instruction, an instruction before which to insert the alloca instruction, etc. As another example, the CallInst class (http://llvm.org/doxygen/classllvm_1_1CallInst.html) represents a call instruction and has a static Create() method that you can use to create a new call instruction. -- John T.
Thanks for reply. I have used AllocaInst, it's working but i think it's only for allocating some memory for new variable. And CallInst creates a call instruction. I am looking for creating a add or sub instruction. I used function instruction(), which gives me error "error: cannot allocate an object of abstract type ‘llvm::Instruction’" and also "Instruction.h:28: note: because the following virtual functions are pure within ‘llvm::Instruction’:", "Instruction.h:50: note: virtual llvm::Instruction* llvm::Instruction::clone(llvm::LLVMContext&) const" Also i have used BinaryOperator::create(), but it gives error that there is no function called create(). Thanks again for your reply. John Criswell-2 wrote:> > help__me_please wrote: >> Can you please give an example of creating an instruction (for example >> add >> instructions with two operand a and b)? I am trying instruction() for a >> while, but no success yet. >> > > You need to look for the appropriate subclass of llvm::Instruction and > find the method for creating a new instruction. The method is usually a > static method and takes arguments pointing to the values to use as > operands. Doxygen is your best resource for finding these methods. > > For example, if you look at > http://llvm.org/doxygen/classllvm_1_1AllocaInst.html, you can see that > the AllocaInst class (which represents an alloca instruction) has a > standard constructor method that takes the type of object to allocate, > the name of the new alloca instruction, an instruction before which to > insert the alloca instruction, etc. > > As another example, the CallInst class > (http://llvm.org/doxygen/classllvm_1_1CallInst.html) represents a call > instruction and has a static Create() method that you can use to create > a new call instruction. > > -- John T. > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- View this message in context: http://old.nabble.com/Operand%2C-instruction-tp21961718p28238512.html Sent from the LLVM - Dev mailing list archive at Nabble.com.
Hello, how to get the numerical value of an constant operand? For ex. %tmp mul i32 %indvar, 6 , in this instruction second operand is a numerical constant with value 6. But i am only able to print it by using getOperand(1), not able to store it in any integer variable. Using getName() returns a empty string. Is there any way to solve this problem? Thank you. John Criswell-2 wrote:> > help__me_please wrote: >> Can you please give an example of creating an instruction (for example >> add >> instructions with two operand a and b)? I am trying instruction() for a >> while, but no success yet. >> > > You need to look for the appropriate subclass of llvm::Instruction and > find the method for creating a new instruction. The method is usually a > static method and takes arguments pointing to the values to use as > operands. Doxygen is your best resource for finding these methods. > > For example, if you look at > http://llvm.org/doxygen/classllvm_1_1AllocaInst.html, you can see that > the AllocaInst class (which represents an alloca instruction) has a > standard constructor method that takes the type of object to allocate, > the name of the new alloca instruction, an instruction before which to > insert the alloca instruction, etc. > > As another example, the CallInst class > (http://llvm.org/doxygen/classllvm_1_1CallInst.html) represents a call > instruction and has a static Create() method that you can use to create > a new call instruction. > > -- John T. > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- View this message in context: http://old.nabble.com/Operand%2C-instruction-tp21961718p28329007.html Sent from the LLVM - Dev mailing list archive at Nabble.com.