summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-08-09 12:37:36 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-08-09 12:37:36 +0000
commit511c3fc529c3f5cae16770847cfcc6407f00cf01 (patch)
tree55a515949f4eaa0bb2ee281eb9d6175416eb5279 /llvm/lib
parent6b01e1c190fe45568d69d3ca5230f4c186cb46a2 (diff)
downloadbcm5719-llvm-511c3fc529c3f5cae16770847cfcc6407f00cf01.tar.gz
bcm5719-llvm-511c3fc529c3f5cae16770847cfcc6407f00cf01.zip
[X86][SSE] Remove PMULDQ/PMULUDQ by zero
Exposed by D50328 Differential Revision: https://reviews.llvm.org/D50328 llvm-svn: 339337
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 14e54f0e4e2..a7560b70049 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -39689,6 +39689,15 @@ static SDValue combinePMULDQ(SDNode *N, SelectionDAG &DAG,
SDValue LHS = N->getOperand(0);
SDValue RHS = N->getOperand(1);
+ // Canonicalize constant to RHS.
+ if (DAG.isConstantIntBuildVectorOrConstantInt(LHS) &&
+ !DAG.isConstantIntBuildVectorOrConstantInt(RHS))
+ return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0), RHS, LHS);
+
+ // Multiply by zero.
+ if (ISD::isBuildVectorAllZeros(RHS.getNode()))
+ return RHS;
+
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
TargetLowering::TargetLoweringOpt TLO(DAG, !DCI.isBeforeLegalize(),
!DCI.isBeforeLegalizeOps());
OpenPOWER on IntegriCloud