[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