Hi Hui, If you compile your program with --baseline (or just --no-copy-propagation) you should see that most local variables names are still in the llvm IR. I'm testing with the C backend, but it should be true for you too. The reason that they are normally missing is because of normalization and optimizations like copy propagation. Your globals will probably maintain their names because copy propagation isn't performed on global variables.
As an example things like: var x = 1 + 1 + 1; writeln(x); with normalization will turn into: tmp1 = 1+1; tmp2 = tmp1+1; x = tmp2; writeln(x); and copy propagation will turn that into: tmp1 = 1+1; tmp2 = tmp1+1; writeln(tmp2); Note that my example is a simplification and might not represent normalization or copy propagation exactly, but that's the basic idea. In some cases your local variable names will still be preserved, it really depends on the code. So far as I know, that's the reason your local variable names are missing. Turning off copy propagation is going to add a lot more bloat to the IR so I don't know how useful it's going to be to you. You'll at least be able to find the local variable names, but there's going to be a lot of needless assignments. Elliot -----Original Message----- From: Hui Zhang <[email protected]> Date: Tuesday, December 16, 2014 at 3:53 PM To: Chapel Sourceforge Developers List <[email protected]> Subject: [Chapel-developers] question about local variable names >Hello, > > >I'm looking at the llvm output of the chapel programs compiled with >"--llvm", I found that all the local variables are named as "*_temp*", >mostly call_temp1, call_temp2......therefore > I can't find the exactly local variable that I defined in the source >code. > > >Later on, I just tested some other programs in the benchmark, and I >found that local variables with the same name as in chapel program are in >the LLVM IR ! (of course, there are many > other call_tmp as well) So the compiler does generate local variables >with the same chapel name, but it doesn't when I test my super simple >chapel program, really weird...my code is as below: > > >module Hui { > config const message = "Hello, world!"; > var gv_t: (int, real) = (1, 2.3); > var gv_b: bool = true; > > // Define an Actor class > class Actor { > var name: string; > var age: uint; > } > > var globalActor: Actor; > > proc sayhello(level: int){ > writeln("Hello, Hui",level); > } > > proc factorial(x: int) : int { > var anything=(x+5)**x : int; > sayhello(anything); > if x < 0 then > halt("factorial -- Sorry, this is not the gamma procedure!"); > return if x == 0 then 1 else x * factorial(x-1); > } > > writeln("A simple procedure"); > > proc main() { > var localActor = new Actor(); > var Number=6: int; > writeln(message); > writeln("6! is ", factorial(Number)); > } >} > > >So When I searched IR, I did find global variables like gv_t, gv_b, >globalActor, but I couldn't find "anything" (local in factorial), or >"localActor","Number" (local in main) > > >Can anyone tell why is that ? > > >Thanks > >-- >Best regards > > >Hui Zhang > > ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk _______________________________________________ Chapel-developers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/chapel-developers
