[PATCH] D88773: Reland "[WebAssembly] Emulate v128.const efficiently""

Dan Weber via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Oct 3 14:17:27 PDT 2020


dweber added a comment.

Fix for the integer check.  Proposal for a better, documented alternative solution.



================
Comment at: llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp:1584
     };
-  }
-  if (!Result) {
+  } else if (NumConstantLanes >= NumSplatLanes && VecT.isInteger()) {
+    // Otherwise, if this is an integer vector, pack the lane values together so
----------------
dweber wrote:
> @tlively this is a real edge case, but I think you need to verify that the integer type is a representable native integer type. If APInt causes VecT.isInteger() to return true, you'll have a colossal headache with supporting integers that are 27 bits. 



================
Comment at: llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp:1589-1602
+    std::array<uint64_t, 2> I64s{{0, 0}};
+    std::array<uint64_t, 2> ConstLaneMasks{{0, 0}};
+    size_t LaneBits = 128 / Lanes;
+    size_t HalfLanes = Lanes / 2;
+    for (size_t I = 0; I < Lanes; ++I) {
+      const SDValue &Lane = Op.getOperand(I);
+      if (IsConstant(Lane)) {
----------------



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D88773



More information about the llvm-commits mailing list