[PATCH] D57377: [CGP] Add support for sinking operands to their users, if they are free.

Florian Hahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 29 03:29:43 PST 2019


fhahn created this revision.
fhahn added reviewers: SjoerdMeijer, t.p.northover, samparker, efriedma.
Herald added subscribers: hiraditya, kristof.beyls, javed.absar.

This patch improves code generation for some AArch64 ACLE intrinsics. It adds
support to CGP to duplicate and sink operands to their user, if they can be
folded into a target instruction, like zexts and sub into usubl. It adds a
TargetLowering hook shouldSinkOperands, which looks at the operands of
instructions to see if sinking is profitable.

I decided to add a new target hook, as for the sinking to be profitable,
at least on AArch64, we have to look at multiple operands of an
instruction, instead of looking at the users of a zext for example.

The sinking is done in CGP, because it works around an instruction
selection limitation. If instruction selection is not limited to a
single basic block, this patch should not be needed any longer.

Alternatively this could be done in the LoopSink pass, which tries to
undo LICM for instructions in blocks that are not executed frequently.

Note that we do not force the operands to sink to have a single user,
because we duplicate them before sinking. Therefore this is only
desirable if they really can be done for free. Additionally we could
consider the impact on live ranges later on.

This should fix https://bugs.llvm.org/show_bug.cgi?id=40025.

As for performance, we have internal code that uses intrinsics and can
be speed up by 10% by this change.

I would appreciate any feedback, especially related to where to best put
the target hook.


https://reviews.llvm.org/D57377

Files:
  llvm/include/llvm/CodeGen/TargetLowering.h
  llvm/lib/CodeGen/CodeGenPrepare.cpp
  llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
  llvm/lib/Target/AArch64/AArch64ISelLowering.h
  llvm/test/Transforms/CodeGenPrepare/AArch64/sink-free-instructions.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57377.184056.patch
Type: text/x-patch
Size: 19550 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190129/bc7b3eb8/attachment.bin>


More information about the llvm-commits mailing list