[PATCH] D113603: [x86] fold vector (X > -1) & Y to shift+andn

Simon Pilgrim via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 10 13:53:28 PST 2021


RKSimon added inline comments.


================
Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:45817
+        isAllOnesOrAllOnesSplat(Op1.getOperand(1)))
+      std::swap(Op0, Op1);
+
----------------
I know this shouldn't technically fall through, but its still a little scary to be commuting Op0/Op1 like this - maybe just duplicate fold?


================
Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:45823
+      SDValue ShAmtC = DAG.getConstant(VT.getScalarSizeInBits() - 1, DL, VT);
+      SDValue Sra = DAG.getNode(ISD::SRA, DL, VT, Op0.getOperand(0), ShAmtC);
+      return DAG.getNode(X86ISD::ANDNP, DL, VT, Sra, Op1);
----------------
Use getTargetVShiftByConstNode ?


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

https://reviews.llvm.org/D113603



More information about the llvm-commits mailing list