[PATCH] D74495: [VectorCombine] try to form vector binop to eliminate an extract element

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 12 09:28:38 PST 2020


spatel created this revision.
spatel added reviewers: lebedev.ri, RKSimon, efriedma, craig.topper.
Herald added subscribers: hiraditya, mcrosier.
Herald added a project: LLVM.

binop (extelt X, C), (extelt Y, C) --> extelt (binop X, Y), C

This is a transform that has been considered for canonicalization (instcombine) in the past because it reduces instruction count. But as shown in the x86 tests, it's impossible to know if it's profitable without a cost model. There are many potential target constraints to consider.

We have implemented similar transforms in the backend (DAGCombiner and target-specific), but I don't think we have this exact fold there either (and if we did it in SDAG, it wouldn't work across blocks).

Note: this patch was intended to handle the more general case where the extract indexes do not match, but it got too big, so I scaled it back to this pattern for now.


https://reviews.llvm.org/D74495

Files:
  llvm/lib/Transforms/Vectorize/VectorCombine.cpp
  llvm/test/Transforms/VectorCombine/X86/extract-binop.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74495.244201.patch
Type: text/x-patch
Size: 7794 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200212/8377ac88/attachment.bin>


More information about the llvm-commits mailing list