diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-26 11:48:52 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-26 11:48:52 +0000 |
| commit | ebabd79f43be3360ea2f83e0169396e72162b547 (patch) | |
| tree | 2042af87a33d36f3d9bec1d0bf4132387f1e8a0a /llvm/lib/Target | |
| parent | 5d6f3d9f45b2222f97515b2b07fa214dbd016a53 (diff) | |
| download | bcm5719-llvm-ebabd79f43be3360ea2f83e0169396e72162b547.tar.gz bcm5719-llvm-ebabd79f43be3360ea2f83e0169396e72162b547.zip | |
[X86][SSE] canReduceVMulWidth - use ComputeNumSignBits/SignBitIsZero directly
Don't reinvent the wheel for BUILD_VECTOR/ZERO_EXTEND - its only the ANY_EXTEND special case that needs handling.
llvm-svn: 343096
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 02164c85fee..50b027eaa44 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -33967,25 +33967,9 @@ static bool canReduceVMulWidth(SDNode *N, SelectionDAG &DAG, ShrinkMode &Mode) { else return false; IsPositive[i] = true; - } else if (Opd.getOpcode() == ISD::BUILD_VECTOR) { - // All the operands of BUILD_VECTOR need to be int constant. - // Find the smallest value range which all the operands belong to. - SignBits[i] = 32; - IsPositive[i] = true; - for (const SDValue &SubOp : Opd.getNode()->op_values()) { - if (SubOp.isUndef()) - continue; - auto *CN = dyn_cast<ConstantSDNode>(SubOp); - if (!CN) - return false; - APInt IntVal = CN->getAPIntValue(); - if (IntVal.isNegative()) - IsPositive[i] = false; - SignBits[i] = std::min(SignBits[i], IntVal.getNumSignBits()); - } } else { SignBits[i] = DAG.ComputeNumSignBits(Opd); - if (Opd.getOpcode() == ISD::ZERO_EXTEND) + if (DAG.SignBitIsZero(Opd)) IsPositive[i] = true; } } |

