[llvm-dev] RFC: Inline expansion of memcmp vs call to standard library

Zaara Syeda via llvm-dev llvm-dev at lists.llvm.org
Thu Dec 29 11:35:52 PST 2016


Currently on PowerPC, calls to memcmp are not expanded and are left as
library calls. In certain conditions, expansion can improve performance
rather than calling the library function as done for functions like memcpy,
memmove, etc. This patch (https://reviews.llvm.org/D28163) is an initial
implementation for PowerPC to expand memcmp when the size is an 8 byte
multiple.
The approach currently added for this expansion tries to use the existing
infrastructure by overriding the virtual function EmitTargetCodeForMemcmp.
This function works on the SelectionDAG, but the expansion requires control
flow for early exit. So, instead of implementing the expansion within
EmitTargetCodeForMemcmp, a new pseudo instruction is added for memcmp and a
SelectionDAG node for this new pseudo is created in
EmitTargetCodeForMemcmp. This pseudo instruction is then expanded during
lowering in EmitInstrWithCustomInserter.

The advantage of this approach is that it uses the existing infrastructure
and does not impact other targets. If other targets would like to expand
memcmp, they can also override EmitTargetCodeForMemcmp and create their own
expansion.

Another option to consider is adding a new optimization pass for this
expansion that isn’t target specific if other targets would benefit from a
more general infrastructure.

Please provide feedback if this approach should be continued to implement
the PowerPC specific memcmp expansions or whether the community is
interested in devising a more general approach.

Thanks,

Zaara Syeda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161229/1990fc64/attachment.html>


More information about the llvm-dev mailing list