[llvm-commits] [llvm] r47046 - in /llvm/trunk: include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/SimpleRegisterCoalescing.cpp lib/CodeGen/SimpleRegisterCoalescing.h
Chris Lattner
clattner at apple.com
Wed Feb 13 09:31:29 PST 2008
On Feb 13, 2008, at 1:47 AM, Evan Cheng wrote:
>> Very nice, does it also help shootout/fib?
>
> bh speedup doesn't seem real. It doesn't help fib.
Ok, once things have settled, please take a look at the comments in
the bugzilla to see if there are other cases being missed.
>> This idiom happens a lot in the preexisting code. Please use:
>>
>> VNInfo *AValNo = IntA.FindLiveRangeContaining(CopyIdx-1)->valno;
>
> ALR is also used below.
Ok!
>>> + for (unsigned i = 0, e = DefMI->getNumOperands(); i != e; ++i) {
>>
>> This loop needs a comment. What are you trying to find with this
>> loop? Maybe it should be moved out to its own function which just
>> returns idx? This would force you to name it, which would describe
>> what it does :)
>
> There is a reason I said "initial" in the commit message. This is not
> done. I need a target hook to tell me what is the new destination
> register after commuting. Right now this is basically assuming x86
> commutable instructions: A = A + B
Ok.
>> Another random question unrelated to this code: now that we have
>> efficient RAUW, can we eliminate the 'rep' mapping stuff and just
>> RAUW vregs as they are coallesced?
>
> Well, actually it's related. I think it's required for correctness.
> See below.
Ah, I see. Well this seems like an independently useful change that
will both speed up and simplify coalescing. Are you interested in
tackling it as part of this project?
>> Yay for use_iterators :)
>
> Except I don't think this is quite right. Iterating through uses of
> IntA.reg means we end up not updating other uses that have already
> been coalesced to it.
Yeah, that's bad.
>> Where the use iterator could point to the first r2, and incrementing
>> it could point to the next r2. This could be avoided by not zapping
>> instructions in this loop: move the copy zapping to a walk over a
>> smallset or something.
>
> Nothing is being zapped in the loop. Copies that would be zapped are
> put into a set JoinedCopies. In fact, all uses have to be updated to
> the new register.
Ok.
>> It isn't clear to me what this code is doing. It looks like it is
>> looking for the copy that has now becomes an identity copy. Is there
>> some way to factor this with other code that is coallescing copies
>> away? It seems duplicated from somewhere else. It would be nicer to
>
> Not really. A number of things are happening here. We are trying to
> determine which copies are now identity copies and make sure their
> valno# will be eliminated. We also need to transfer the live ranges
> defined by the (now dead) copies to the new val# defined by the
> commuted definition MI. It's also tracking kill information.
Ok, please comment it a bit better. Is there any way to avoid this
work or factor this out into functions that can be shared with other
code?
>> just add all copies to a small vector and then zap them later or
>> something, to keep the logic simple.
>
> That's essentially what's happening. This has gone through a number of
> iterations already. Apart from some cosmetic changes, it's not going
> to get much simpler than this.
ok.
>> Does this need to be an ivar? Can it just be passed by-ref between
>> the methods that need it?
>
> This will be cleaned up later as part of RAUW change.
Ok. Thanks Evan!
-Chris
More information about the llvm-commits
mailing list