[LLVMdev] Unknown or runtime type in function definition?

Eli Friedman eli.friedman at gmail.com
Fri Apr 9 15:11:58 PDT 2010


On Fri, Apr 9, 2010 at 2:11 PM, Bueno, Denis <denbuen at sandia.gov> wrote:
> Hello all,
>
> I'm trying to understand a bit of LLVM IR syntax.  I have a function
> definition which looks like this in IR:
>
>    define void @foo(%1* ptr) { ...
>
> The C code for foo has a definition that looks like:
>
>    typedef struct bar_struct bar;
>    ... Definition of struct bar_struct ...
>    void foo(bar *ptr) { ...
>
> I can't whittle down a convenient test source file just now; but I'm trying
> to understand what the syntax of the 'define' above means -- specifically,
> what does it mean for a parameter to have type '%1*'?  What is the semantics
> here?  Inside the body of @foo, there is an SSA variable %1 -- is that
> variable related to the %1 in the type of the parameter?  (It doesn't seem
> to be, which is why I ask.)

In that context, %1 refers to an unnamed struct; whether %1 refers to
a type or a value is determined by the context.  Short example which
should help:

%0 = type { i32, float, float, double }
define i32 @a(%0*) {
entry:
  getelementptr %0* %0, i32 0, i32 0
  load i32* %1
  ret i32 %2
}

-Eli




More information about the llvm-dev mailing list