Skip to content

[AArch64][PeepholeOptimizer] Look through PHIs to find additional register sources #24879

Open
@llvmbot

Description

@llvmbot
Bugzilla Link 24505
Version trunk
OS Windows NT
Reporter LLVM Bugzilla Contributor
CC @bcardosolopes,@kbeyls,@qcolombet

Extended Description

Bruno recently committed a change to improve the peephole optimizer. He was specifically targeting x86, but this can be easily extended to other architectures by marking target-specific instructions in the form "one source + one destination bitcast" with "isBitcast."

The specific commit is r245442
http://llvm.org/viewvc/llvm-project?view=revision&revision=245442

[PeepholeOptimizer] Look through PHIs to find additional register sources

Reapply r243486.

  • 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

Bruno did later revert the commit in r245446. Regardless, once the final patch lands we should consider investigating.

Metadata

Metadata

Assignees

No one assigned

    Labels

    backend:AArch64bugzillaIssues migrated from bugzillaincompleteIssue not complete (e.g. missing a reproducer, build arguments, etc.)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions