[LLVMdev] Convenience methods in ConstantExpr et al
Nick Lewycky
nicholas at mxc.ca
Wed Feb 2 13:29:59 PST 2011
Talin wrote:
> On Mon, Jan 31, 2011 at 10:57 PM, Talin <viridia at gmail.com
> <mailto:viridia at gmail.com>> wrote:
>
> I notice that there's a lot of inconsistency in the various LLVM
> classes with respect to convenience methods. Here's some examples:
>
> For creating GEPS, IRBuilder has:
>
> CreateGEP (2 overloads)
> CreateInBoundsGEP (2 overloads)
> CreateConstGEP1_32
> CreateConstInBoundsGEP1_32
> CreateConstGEP2_32
> CreateConstInBoundsGEP2_32
> CreateConstGEP1_64
> CreateConstInBoundsGEP1_64
> CreateConstGEP2_64
> CreateConstInBoundsGEP2_64
> CreateStructGEP
>
> All of which are very useful. However, ConstExpression only has:
>
> getGetElementPtr
> getGetElementPtr
> getInBoundsGetElementPtr
> getInBoundsGetElementPtr
>
> It would be nice if ConstantExpr's GEP-building methods used the
> same naming convention and had the same convenience methods as
> IRBuilder. (In fact, the naming convention between IRBuilder and the
> various Constants.h classes desperately needs to be reconciled, a
> point which I am sure everyone is painfully aware of.)
It's a matter of layering. IRBuilder will call into ConstantExpr as
needed; the ConstantExpr API is at the same level as the
llvm::Instruction hierarchy itself.
> Another thing I'd like to see is for ConstantArray::get(),
> ConstantStruct::get() and ConstantVector::get() to have an overload
> that takes an iterator pair like IRBuilder's CreateGEP and
> CreateCall methods. Also useful for creating small structs would be
> overloads for ConstantStruct::get that took 1-4 arguments, instead
> of having to create a vector every time. Even better would be an
> "end with null" version, like StructType::get() does. These should
> be added to FunctionType::get() as well.
Yep!
Nick
> By the way, the reason I'm asking this is because I thought I might
> spend some time adding the convenience methods myself - but if there is
> a plan underway to fix up the APIs or resolve the incompatibilities with
> the naming conventions I don't want to get in the way of that.
More information about the llvm-dev
mailing list