[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