[PATCH] D141877: [NFC][X86] `canonicalizeShuffleWithBinOps()`: refactor and generalize, NFC

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 17 08:59:54 PST 2023


lebedev.ri marked an inline comment as done.
lebedev.ri added inline comments.


================
Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:40498
+        std::array<SDValue, 2> N0Ops;
+        for (auto I : zip(N0->ops(), N0Ops))
+          std::get<1>(I) = peekThroughOneUseBitcasts(std::get<0>(I));
----------------
lebedev.ri wrote:
> RKSimon wrote:
> > Given we know that N0 is a binop - all this generic zip/enumate iteration code seems unnecessary tbh.
> This is a generalization. Currently, the code does exactly the same,
> but the implicit loop is manually unrolled. With unrolled loops,
> you suffer the cost of duplicate LOC, having double the LOC to verify for correctness,
> and verify that they do the right thing for right "iteration" (operand).
> Doing that is counter-productive and anti-general.
> 
> In fact, that is the whole reason why LLVM is seeing such an explosion of code size,
> because everything is special-coded, instead of having a "few" general utils,
> that are both easy to prove to be correct, and don't incur bloat,
> and are easy to use, and make easier to write new code.
(to be most specific: the code to deal unops is still a specialization of the code
to deal with binops, they can be deduplicated further.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141877/new/

https://reviews.llvm.org/D141877



More information about the llvm-commits mailing list