From: Simon Pilgrim Date: Sun, 10 Feb 2019 17:42:15 +0000 (+0000) Subject: [DAG] Add optional AllowUndefs to isNullOrNullSplat X-Git-Tag: android-x86-9.0-r1~7182 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=86334b318cf7d74eaab25931c82ce9f51dc24c37;p=android-x86%2Fexternal-llvm.git [DAG] Add optional AllowUndefs to isNullOrNullSplat No change in default behaviour (AllowUndefs = false) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353646 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index 23d353beb09..c0dd9d1e12f 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -1633,9 +1633,9 @@ ConstantSDNode *isConstOrConstSplat(SDValue N, bool AllowUndefs = false); ConstantFPSDNode *isConstOrConstSplatFP(SDValue N, bool AllowUndefs = false); /// Return true if the value is a constant 0 integer or a splatted vector of -/// a constant 0 integer (with no undefs). +/// a constant 0 integer (with no undefs by default). /// Build vector implicit truncation is not an issue for null values. -bool isNullOrNullSplat(SDValue V); +bool isNullOrNullSplat(SDValue V, bool AllowUndefs = false); /// Return true if the value is a constant 1 integer or a splatted vector of a /// constant 1 integer (with no undefs). diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index be867b24ba6..d242d3c159a 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -7128,11 +7128,7 @@ SDValue DAGCombiner::visitFunnelShift(SDNode *N) { return IsFSHL ? N0 : N1; auto IsUndefOrZero = [](SDValue V) { - if (V.isUndef()) - return true; - if (ConstantSDNode *Cst = isConstOrConstSplat(V, /*AllowUndefs*/true)) - return Cst->getAPIntValue() == 0; - return false; + return V.isUndef() || isNullOrNullSplat(V, /*AllowUndefs*/ true); }; if (ConstantSDNode *Cst = isConstOrConstSplat(N2)) { diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 2e92f9582be..9b00a550e33 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -8622,9 +8622,9 @@ ConstantFPSDNode *llvm::isConstOrConstSplatFP(SDValue N, bool AllowUndefs) { return nullptr; } -bool llvm::isNullOrNullSplat(SDValue N) { +bool llvm::isNullOrNullSplat(SDValue N, bool AllowUndefs) { // TODO: may want to use peekThroughBitcast() here. - ConstantSDNode *C = isConstOrConstSplat(N); + ConstantSDNode *C = isConstOrConstSplat(N, AllowUndefs); return C && C->isNullValue(); }