Daniel Dunbar
2010-Apr-10 01:24 UTC
[LLVMdev] Unknown or runtime type in function definition?
On Fri, Apr 9, 2010 at 3:11 PM, Eli Friedman <eli.friedman at gmail.com> wrote:> 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:FWIW, I personally regard this as a bug not a feature. It doesn't make the IR any easier to read. - Daniel> > %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 > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
Victor Zverovich
2010-Apr-11 08:26 UTC
[LLVMdev] Unknown or runtime type in function definition?
> > > 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: > > FWIW, I personally regard this as a bug not a feature. It doesn't make > the IR any easier to read. > >I also find it very confusing. It would be nice if different prefixes were used for names of types and values. Victor -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100411/756d9d16/attachment.html>
OvermindDL1
2010-Apr-11 15:09 UTC
[LLVMdev] Unknown or runtime type in function definition?
On Sun, Apr 11, 2010 at 2:26 AM, Victor Zverovich <victor.zverovich at googlemail.com> wrote:>> > 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: >> >> FWIW, I personally regard this as a bug not a feature. It doesn't make >> the IR any easier to read. >> > > I also find it very confusing. It would be nice if different prefixes were > used for names of types and values.Why is that? In the IR there are specific places for types and specific places for values, there is no ambiguity, so why would you need different prefixes?