[llvm-commits] [llvm] r80654 - in /llvm/trunk: lib/CodeGen/TwoAddressInstructionPass.cpp test/CodeGen/ARM/2009-08-31-TwoRegShuffle.ll

Bob Wilson bob.wilson at apple.com
Tue Sep 1 12:00:49 PDT 2009


On Sep 1, 2009, at 11:43 AM, Evan Cheng wrote:
> Since you have already found the KillMO, there is no need to call  
> removeVirtualRegisterKilled() which would scan the operands again.  
> Just update LV varinfo and unset the kill marker.

Oh, I see what you mean.  That makes sense.

> Let's consider a more extensive instead. How about something like  
> this:
>
> 1. Scan an instruction. Look at all the operands. Keep a list of  
> source registers that are tied to one or more def registers.
> 2. For each source register, track which def registers it is being  
> tied to. It should also track the kill operand index.
> 3. Consider each source register. If it is only tied to one def  
> register, we can consider performing the usual optimizations. If it  
> is tied to multiple def, I don't think the current optimizations are  
> useful.
> 4. If it is tied to multiple def, process it separately. For each of  
> the tied def, add a copy (or remat the def). Move the kill marker to  
> the last copy.
>
> This should make the code more understandable.

That sounds like a good approach.  I'll give it a try....

>
>>
>>>
>>> Since you are working on this code, could be please clean it up a  
>>> bit. Can you factor this if statement:
>>>        if (mi->getOperand(ti).isDead() &&
>>>            isSafeToDelete(mi, regB, TII, Kills)) {
>>>
>>> to a separate function?
>>
>> Like this (in the attached patch)?
>
> Sorry, I meant factoring out lines 827 to 880 to a separate function.

Ah!  (I knew I must have been missing something there.)  I can  
certainly take care of that.



More information about the llvm-commits mailing list