[LLVMdev] global register allocation.
Evan Cheng
evan.cheng at apple.com
Mon Nov 26 16:19:38 PST 2007
One possibility is to only do interprocedural allocation when IPO is
used. In that case, all the functions are in a big bitcode file. You
may also need to enhance the pass manager so you can do lowering,
scheduling one function at a time and then someone gather all the
MachineFunction's for the interprocedural allocation.
Evan
On Nov 24, 2007, at 7:22 PM, Sanjiv Gupta wrote:
> Thanks again. One more question here:
> Since the regalloc works once per function, do I stil have access to
> the Call graph?
> Just saving information between regalloc passes for different
> functions may not be enough for my case. I will need to maintain the
> regalloc info of various passes in the call graph order.
> Anyways thanks for your inputs. I will get back if I need to learn
> more.
>
> Sanjiv
>
> On Nov 23, 2007 11:29 PM, Fernando Magno Quintao Pereira
> <fernando at cs.ucla.edu> wrote:
>>
>> Hi, again,
>>
>> I think you can do it in the same way that the other allocators
>> have
>> been coded, i.e extend RA, register the pass and so forth. I am not
>> sure
>> about the best way to pass information among a run of RegAlloc to the
>> other, maybe the other guys in the list could suggest something.
>> Yet, you
>> can always dump it into a file, and read it again, everytime it is
>> necessary. Remember that RegAlloc will be called once per function.
>> Also,
>> LLVM does very aggressive inlining of method calls, and this may
>> cause the
>> benefits of interprocedural register allocation to be very small,
>> if any.
>> There was one guy (google for Philip Brisk) who was working with
>> interprocedural RA on SSA-form programs.
>>
>> best,
>>
>> Fernando
>>
>>
>>> On 11/23/07, Fernando Magno Quintao Pereira <fernando at cs.ucla.edu>
>>> wrote:
>>>>
>>>>
>>>> Hi, Sanjiv,
>>>>
>>>> those passes operate on the whole machine function. Each machine
>>>> function contains many basic blocks. If a program has many
>>>> functions, the
>>>> register allocator will be called as many times, i.e it does not do
>>>> interprocedural allocation.
>>>>
>>>> best,
>>>>
>>>> Fernando
>>>
>>>
>>> Thanks for replying back.
>>> I am looking to write a regalloc pass that does interprocedural
>>> regalloc.
>>> By constructing a Call Graph and keeping the registers in a single
>>> call
>>> chain different so that i can avoid spilling (saving) across
>>> function calls.
>>> What will be the right place to do so?
>>>
>>> Sanjiv
>>>
>>>> As far as I understand , the regalloc passes provided operate on
>>>> basic
>>>> block
>>>>> level?
>>>>> Is there anything that operate on the whole Module?
>>>>>
>>>>> Thx,
>>>>> Sanjiv
>>>>>
>>>> _______________________________________________
>>>> 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
>>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list