[LLVMdev] Virtual Register allocation across functions
Evan Cheng
evan.cheng at apple.com
Tue Oct 21 09:38:21 PDT 2008
On Oct 20, 2008, at 2:14 PM, Villmow, Micah wrote:
> I’m targeting a language that uses virtual registers and not
> physical registers. So the easiest way to implement this is to use
> virtual registers, except that they are being restarted after each
> function and clobbering registers in previous functions. For example:
>
>
> start function 0
> r1024 = mov %var0.0
> r1025 = mov %var0.1
> lots of intermediate code
> call function1 w/ 3 parameters
> more intermediate code
> %r1300 = add %call.result, %r1024
> end function 0
>
> start function 1
> %r1024 = mov %var1.0
> %r1025 = mov %var1.1
> %r1026 = mov %var1.2
> some code
> return some value
> end function 0
>
> The mov to r1024 in function 1 clobbers the data from function 0.
> The only ways I can think to get around this, is to push every
> virtual register used in a function to a stack or some internal data
> structure and then pull them back out for
That's similar to other targets where registers are saved across calls
(or by the calls). However, I can see this might be very inefficient
for your target.
> each function call. The other option is to run a separate pass just
> to renumber register. This is not what I would like to do as the
> easiest solution is just to get a variable start point.
>
> Any other ideas that might accomplish what I want, that I might be
> missing?
I don't have a non-hacky solution. The least hacky solution I can
think of is to enhance MachineRegisterInfo to tell it to start virtual
register number at something the user specified.
Evan
>
> Thanks,
>
>
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-
> bounces at cs.uiuc.edu] On Behalf Of Evan Cheng
> Sent: Monday, October 20, 2008 2:03 PM
> To: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] Virtual Register allocation across functions
>
> No, there isn't something like that right now. What are you trying
> to accomplish?
>
> If you wish to implement this, it shouldn't be hard to do. Right
> now, MachineRegisterInfo re-starts virtual register number at
> TargetRegisterInfo::FirstVirtualRegister. You can add a mechanism to
> change that to a variable instead.
>
> Evan
>
> On Oct 20, 2008, at 1:43 PM, Villmow, Micah wrote:
>
>
> Is there currently a way to have virtual register allocation
> information be saved across functions so that if I create a new
> virtual register in a function that it doesn’t use a virtual
> register allocated in any previous function?
>
> Thanks,
>
> Micah Villmow
> Systems Engineer
> Advanced Technology & Performance
> Advanced Micro Devices Inc.
> 4555 Great America Pkwy,
> Santa Clara, CA. 95054
> P: 408-572-6219
> F: 408-572-6596
>
> _______________________________________________
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081021/8ee2c7ae/attachment.html>
More information about the llvm-dev
mailing list