[llvm] r345065 - X86DAGToDAGISel::matchBitExtract(): lambdas can't have default arguments.

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 23 11:27:10 PDT 2018


Author: lebedevri
Date: Tue Oct 23 11:27:10 2018
New Revision: 345065

URL: http://llvm.org/viewvc/llvm-project?rev=345065&view=rev
Log:
X86DAGToDAGISel::matchBitExtract(): lambdas can't have default arguments.

As reported by ctopper.
That is a gcc-only warning at the moment.

Modified:
    llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=345065&r1=345064&r2=345065&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Tue Oct 23 11:27:10 2018
@@ -2709,10 +2709,12 @@ bool X86DAGToDAGISel::matchBitExtract(SD
   // If we have BMI2's BZHI, we are ok with muti-use patterns.
   // Else, if we only have BMI1's BEXTR, we require one-use.
   const bool CanHaveExtraUses = Subtarget->hasBMI2();
-  auto checkOneUse = [CanHaveExtraUses](SDValue Op, unsigned NUses = 1) {
+  auto checkUses = [CanHaveExtraUses](SDValue Op, unsigned NUses) {
     return CanHaveExtraUses ||
            Op.getNode()->hasNUsesOfValue(NUses, Op.getResNo());
   };
+  auto checkOneUse = [checkUses](SDValue Op) { return checkUses(Op, 1); };
+  auto checkTwoUse = [checkUses](SDValue Op) { return checkUses(Op, 2); };
 
   // a) x & ((1 << nbits) + (-1))
   auto matchPatternA = [&checkOneUse, &NBits](SDValue Mask) -> bool {
@@ -2750,7 +2752,8 @@ bool X86DAGToDAGISel::matchBitExtract(SD
   SDValue X;
 
   // d) x << (32 - y) >> (32 - y)
-  auto matchPatternD = [&checkOneUse, Size, &X, &NBits](SDNode *Node) -> bool {
+  auto matchPatternD = [&checkOneUse, &checkTwoUse, Size, &X,
+                        &NBits](SDNode *Node) -> bool {
     if (Node->getOpcode() != ISD::SRL)
       return false;
     SDValue N0 = Node->getOperand(0);
@@ -2760,7 +2763,7 @@ bool X86DAGToDAGISel::matchBitExtract(SD
     SDValue N01 = N0->getOperand(1);
     // Both of the shifts must be by the exact same value.
     // There should not be any uses of the shift amount outside of the pattern.
-    if (N1 != N01 || !checkOneUse(N1, 2))
+    if (N1 != N01 || !checkTwoUse(N1))
       return false;
     // Skip over a truncate of the shift amount.
     if (N1->getOpcode() == ISD::TRUNCATE) {




More information about the llvm-commits mailing list