How to create a ConstantInt in LLVM?

好久不见. 提交于 2020-01-22 09:51:04

问题


I'm not sure how to create a ConstantInt in LLVM- I know the number I would like to create, but I'm unsure how I can make a ConstantInt representing that number; I can't seem to find the constructor I need in the documentation.

I'm thinking it has to be along the lines of

ConstantInt consVal = new ConstantInt(something here).

I know I want it to be an int type, and I know my value... I just want to create a number!


回答1:


Most things in LLVM are created through a static method call instead of directly using a constructor. One reason is that an existing object can be returned instead of creating a new instance.

The static members of ConstantInt have a number of creation methods. You're probably most interested in get (Type *Ty, uint64_t V, bool isSigned=false) and, if you don't already have an integer type, IntegerType::get (LLVMContext &C, unsigned NumBits).




回答2:


To make an a 32 bit integer:

llvm::ConstantInt::get(context, llvm::APInt(/*nbits*/32, value, /*bool*/is_signed));



回答3:


To create a 32-bit integer constant:

llvm::Type *i32_type = llvm::IntegerType::getInt32Ty(llvm_context);
llvm::Constant *i32_val = llvm::ConstantInt::get(i32_type, -1/*value*/, true);



回答4:


ConstantInt* const_int32  = ConstantInt::get( Context , APInt(32, StringRef("10"), 10));

where, APInt(32, StringRef("10"), 10); gets int value from string "10" with base 10.



来源:https://stackoverflow.com/questions/16246920/how-to-create-a-constantint-in-llvm

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!