[PATCH] D41463: [CodeGen] Add a new pass to sink Copy instructions after RA
Jun Bum Lim via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 20 13:58:03 PST 2017
junbuml created this revision.
junbuml added reviewers: qcolombet, MatzeB, thegameg, mcrosier, gberry, hfinkel.
Herald added subscribers: kristof.beyls, javed.absar, mgorny, aemerson.
This pass sink COPY instructions into a successor close to their use, if
unused in the current block. In the CodeGen phase, COPY instructions are
added in some passes (e.g., ISel and PhiElimination), which are not handled
in MachineSink pass. For example, in AArch64, ISel adds Copy instructions to
move function parameters (PhyReg) to virtual registers in the entry block.
Before RA, MachineSink cannot sink such Copy instructions because SrcReg is
an allocatable PhyReg. By sinking such COPY instructions to successors close
to its actual use, we can avoid executing instructions in case the result is
not used. Also, it will open up more opportunities for other optimizations
(e.g., dead copy elimination in MachineCopyPropagation and shrink-wrapping).
For example, for the machine IR below, this pass will sink %w19 in the entry
into its successor (%bb.1) because %w19 is only live-in in %bb.1.
%wzr = SUBSWri %w1, 1
%w19 = COPY %w0
Bcc 11, %bb.2
Live Ins: %w19
%w0 = ADDWrr %w0, %w19
%w0 = COPY %wzr
As we sink %w19 (CSR in AArch64) into %bb.1, the shrink-wrapping pass will be
able to see %bb.0 as a candidate.
With this change I observed 12% more shrink-wrapping candidate and 13% more dead copies deleted in spec2000/2006/2017 on AArch64.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 18479 bytes
Desc: not available
More information about the llvm-commits