HomePhabricator

[PeepholeOptimizer] Look through PHIs to find additional register sources

Description

[PeepholeOptimizer] Look through PHIs to find additional register sources

Reintroduce r245442. Remove an overly conservative assertion introduced
in r245442. We could replace the assertion to use shareSameRegisterFile
instead, but in that point in insertPHI we already lost the original
Def subreg to check against. So drop the assertion completely.

Original commit message:

  • Teaches the ValueTracker in the PeepholeOptimizer to look through PHI

instructions.

  • Add findNextSourceAndRewritePHI method to lookup into multiple sources

returnted by the ValueTracker and rewrite PHIs with new sources.

With these changes we can find more register sources and rewrite more
copies to allow coaslescing of bitcast instructions. Hence, we eliminate
unnecessary VR64 <-> GR64 copies in x86, but it could be extended to
other archs by marking "isBitcast" on target specific instructions. The
x86 example follows:

A:

psllq %mm1, %mm0
movd  %mm0, %r9
jmp C

B:

por %mm1, %mm0
movd  %mm0, %r9
jmp C

C:

movd  %r9, %mm0
pshufw  $238, %mm0, %mm0

Becomes:

A:

psllq %mm1, %mm0
jmp C

B:

por %mm1, %mm0
jmp C

C:

pshufw  $238, %mm0, %mm0

Differential Revision: http://reviews.llvm.org/D11197
rdar://problem/20404526

Details

Committed
brunoAug 19 2015, 11:53 AM
Parents
rL245478: Merging r245395:
Branches
Unknown
Tags
Unknown