Hi all, I am wondering if there is a way to get a value by name in the C interface for the LLVM Jit? There seems to be a way to name values consistently, but no way to retrieve those LLVMValueRef's by name. I see it is possible to get a struct by name and a type by name and a function by name, and a few other esoteric things, but not a general value. The reason I am wanting this is that I am writing a language where there is a separation between the back end and the code which processes the AST. In particular, I do not have any LLVM values or types in the AST nodes themselves, only strings naming those values and types. When the back end processes the AST it looks up the relevant types and values by string name. The specific circumstance where this causes an issue is with allocating local variables. The back end code needs to access such variables at points different from where they were defined. At present I have to store the relevant LLVMValueRef's in the AST or in some other type information elsewhere in my implementation, rather than store a string name and look them up as needed. Bill.
Hi Bill,> I am wondering if there is a way to get a value by name in the C > interface for the LLVM Jit?since a Value includes simple constants like 42 that have no name, this is not possible in general. Moreover names are usually optional and have no real meaning: they are just there to make the IR easier to read (an exception being struct type names). Perhaps you could maintain a map from name to Value* in your front-end? Ciao, Duncan.> > There seems to be a way to name values consistently, but no way to > retrieve those LLVMValueRef's by name. > > I see it is possible to get a struct by name and a type by name and a > function by name, and a few other esoteric things, but not a general > value. > > The reason I am wanting this is that I am writing a language where > there is a separation between the back end and the code which > processes the AST. In particular, I do not have any LLVM values or > types in the AST nodes themselves, only strings naming those values > and types. When the back end processes the AST it looks up the > relevant types and values by string name. > > The specific circumstance where this causes an issue is with > allocating local variables. The back end code needs to access such > variables at points different from where they were defined. At present > I have to store the relevant LLVMValueRef's in the AST or in some > other type information elsewhere in my implementation, rather than > store a string name and look them up as needed. > > Bill. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
That's what I am doing of course, It;s just odd that I can get a global by name but not a local. Bill. On 21 November 2012 09:35, Duncan Sands <baldrick at free.fr> wrote:> Hi Bill, > > >> I am wondering if there is a way to get a value by name in the C >> interface for the LLVM Jit? > > > since a Value includes simple constants like 42 that have no name, this is > not possible in general. Moreover names are usually optional and have no > real meaning: they are just there to make the IR easier to read (an > exception > being struct type names). > > Perhaps you could maintain a map from name to Value* in your front-end? > > Ciao, Duncan. > >> >> There seems to be a way to name values consistently, but no way to >> retrieve those LLVMValueRef's by name. >> >> I see it is possible to get a struct by name and a type by name and a >> function by name, and a few other esoteric things, but not a general >> value. >> >> The reason I am wanting this is that I am writing a language where >> there is a separation between the back end and the code which >> processes the AST. In particular, I do not have any LLVM values or >> types in the AST nodes themselves, only strings naming those values >> and types. When the back end processes the AST it looks up the >> relevant types and values by string name. >> >> The specific circumstance where this causes an issue is with >> allocating local variables. The back end code needs to access such >> variables at points different from where they were defined. At present >> I have to store the relevant LLVMValueRef's in the AST or in some >> other type information elsewhere in my implementation, rather than >> store a string name and look them up as needed. >> >> Bill. >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev