From: Evan Cheng Date: Fri, 29 Jun 2007 21:44:35 +0000 (+0000) Subject: Only do FNEG xform when the vector type is a floating point type. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c45453fa1db7a5c520208fb6ffbc9fdb823b0526;p=oota-llvm.git Only do FNEG xform when the vector type is a floating point type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37818 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 6fe78cc9cae..1780f372835 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -1798,13 +1798,15 @@ void SelectionDAGLowering::visitSub(User &I) { if (ConstantVector *CV = dyn_cast(I.getOperand(0))) { const VectorType *DestTy = cast(I.getType()); const Type *ElTy = DestTy->getElementType(); - unsigned VL = DestTy->getNumElements(); - std::vector NZ(VL, ConstantFP::get(ElTy, -0.0)); - Constant *CNZ = ConstantVector::get(&NZ[0], NZ.size()); - if (CV == CNZ) { - SDOperand Op2 = getValue(I.getOperand(1)); - setValue(&I, DAG.getNode(ISD::FNEG, Op2.getValueType(), Op2)); - return; + if (ElTy->isFloatingPoint()) { + unsigned VL = DestTy->getNumElements(); + std::vector NZ(VL, ConstantFP::get(ElTy, -0.0)); + Constant *CNZ = ConstantVector::get(&NZ[0], NZ.size()); + if (CV == CNZ) { + SDOperand Op2 = getValue(I.getOperand(1)); + setValue(&I, DAG.getNode(ISD::FNEG, Op2.getValueType(), Op2)); + return; + } } } }