Hi, I want to compute the bitwise 'and' between two values of type int1: %x = and %a, %b . Which is the LLVM instruction that creates this? I only found the APInt class, whose constructor is: APInt(unsigned numBits, uint64_t val, bool isSigned = false) and which provides the bitwise AND operation: APInt llvm::APIntOps::And (const APInt &LHS, const APInt &RHS) Bitwise AND function for APInt. Is this the best way to build the 'and' instruction that I need? If so, how can I send the value uint64_t stored in the values %a , %b of type int1 ? Thank you. Alexandra -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110906/f53e40e8/attachment.html>
Hi Alexandra,> I want to compute the bitwise 'and' between two values of type int1: %x = and > %a, %b .BinaryOperator::CreateAnd That said, use an IRBuilder which has lots of convenience methods (like CreateAnd) to help with creating IR. Ciao, Duncan.> Which is the LLVM instruction that creates this? I only found the APInt class, > whose constructor is: > > APInt(unsigned numBits, uint64_t val, bool isSigned = false) > > and which provides the bitwise AND operation: > > APInt llvm::APIntOps::And > <http://llvm.org/docs/doxygen/html/namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25> > (const APInt &LHS, const APInt &RHS) > Bitwise AND function for APInt > <http://llvm.org/docs/doxygen/html/classllvm_1_1APInt.html>. > > > Is this the best way to build the 'and' instruction that I need? If so, how can > I send the value uint64_t stored in the values %a , %b of type int1 ? > > Thank you. > > Alexandra > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On 09/06/2011 10:40 AM, Jimborean Alexandra wrote:> Hi, > > I want to compute the bitwise 'and' between two values of type int1: %x > = and %a, %b . > Which is the LLVM instruction that creates this?The LLVM-IR instruction for this is: http://llvm.org/docs/LangRef.html#i_and 'and' Instruction ----------------- Syntax: <result> = and <ty> <op1>, <op2> ; yields {ty}:result Overview: The 'and' instruction returns the bitwise logical and of its two operands. For your example this would be: %x = and i1 %a, %b > I only found the APInt class, whose constructor is:> APInt(unsigned numBits, uint64_t val, bool isSigned = false) > > and which provides the bitwise AND operation: > > APInt llvm::APIntOps::And > <http://llvm.org/docs/doxygen/html/namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25> > (const APInt &LHS, const APInt &RHS) > Bitwise AND function for APInt > <http://llvm.org/docs/doxygen/html/classllvm_1_1APInt.html>. > > > Is this the best way to build the 'and' instruction that I need?I am not sure why you look into APInt. APInt is an abstract data type for arbitrary, fixed width integer calculations and is (except of being used by LLVM) independent of LLVM and LLVM-IR. You would use APInt 'and', if you want to perform calculations on data that is already of type APInt or int. If you want to perform the 'and' operation in an LLVM-IR program, you can just add the 'and' instruction into the LLVM-IR source. You can either do this by changing the file with a text editor, or, if you write e.g. a LLVM pass, by construction a new 'and' instruction using the IRBuilder()->CreateAnd(Value *A, Value *B) function. > If so, how can I send the value uint64_t stored in the values %a , %b > of type int1 ? I did not get this one. Could you try to rephrase? Cheers Tobi