Unmerge GEPs to reduce register pressure on IndirectBr edges.

Description

Unmerge GEPs to reduce register pressure on IndirectBr edges.

Summary:
GEP merging can sometimes increase the number of live values and register
pressure across control edges and cause performance problems particularly if the
increased register pressure results in spills.

This change implements GEP unmerging around an IndirectBr in certain cases to
mitigate the issue. This is in the CodeGenPrepare pass (after all the GEP
merging has happened.)

With this patch, the Python interpreter loop runs faster by ~5%.

Reviewers: sanjoy, hfinkel

Reviewed By: hfinkel

Subscribers: eastig, junbuml, llvm-commits

Differential Revision: https://reviews.llvm.org/D36772

Details

Committed
yamauchiSep 11 2017, 10:52 AM
Reviewer
hfinkel
Differential Revision
D36772: Unmerge GEPs to reduce register pressure on IndirectBr edges.
Parents
rL312929: Unroll and separate the remaining parts of isolation
Branches
Unknown
Tags
Unknown