diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-08-09 12:37:36 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-08-09 12:37:36 +0000 |
| commit | 511c3fc529c3f5cae16770847cfcc6407f00cf01 (patch) | |
| tree | 55a515949f4eaa0bb2ee281eb9d6175416eb5279 /llvm/lib | |
| parent | 6b01e1c190fe45568d69d3ca5230f4c186cb46a2 (diff) | |
| download | bcm5719-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.cpp | 9 |
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()); |

