[PATCH] D109295: [X86] Handle inverted inputs when matching VPTERNLOG from 2 binary ops.

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 6 10:14:06 PDT 2021


craig.topper added inline comments.


================
Comment at: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:4232
+  if (IsNot(A)) {
+    TernlogMagicA = ~TernlogMagicA;
+    ParentA = A.getNode();
----------------
pengfei wrote:
> LuoYuanke wrote:
> > pengfei wrote:
> > > LuoYuanke wrote:
> > > > It seems for VPTERNLOG instruction we can accept the 4th operand whose value is allZero or allOne no matter what is logic operation is.
> > > Do you mean the FALSE and TRUE in table 5-10 and 5-11? I think we don't need a VPTERNLOG to generate allZero and allOne.
> > VPTERNLOG select all the possible result of 3 bits. I mean it can be extent to 4 bit as long as the 4th bit is compile-time fixed 0 or 1. For this case the node is xor (X, -1), the same approach can be applied to xor(X, 0), and(X, -1), andnp(X, 0) and so on.
> But other cases can be simplied directly, e.g. xor(X, 0) -> X, and(X, -1) -> X, andnp(X, 0) -> 0 etc.
Right those all should have been simplified by DAGCombine.


================
Comment at: llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:4234
+    ParentA = A.getNode();
+    A = A.getOperand(0);
+  }
----------------
pengfei wrote:
> LuoYuanke wrote:
> > Is the constant operand canonicalized as operand(1)?
> We checked it in line 4225.
DAGCombine should canonicalize XOR with constant to have it on the RHS.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D109295



More information about the llvm-commits mailing list