[llvm-dev] Cast a function parameter to GEP

Tim Northover via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 8 22:03:04 PST 2019


Hi Alberto,

On Sat, 9 Mar 2019 at 05:50, Alberto Barbaro via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str1, i32 0, i32 0)

Because all of its inputs are Constants, this is actually a
GetElementPtrConstantExpr instead of a GetElementPtrInst (the easiest
way to tell on sight without context is the extra parens, which the
instruction variant never has).

The main practical difference between the two is that instances of
Constant don't live in a BasicBlock independently, but are referenced
directly by each user. When printing the IR this is shown by
"inlining" them into the parent Instruction.

LLVM has a GEPOperator class to help deal with this issue; it can be
used to access the common features of Instructions and Constants.
There are similar Operators for other operations because this is quite
a common situation.

> I think it does not work because str1 is a "private constant". Is there a way to solve it?

Broadly true, but the same would apply to any global, not just ones
declared constant.

Cheers.

Tim.


More information about the llvm-dev mailing list