diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -257,9 +257,9 @@ /// Enum that specifies when a float negation is beneficial. enum class NegatibleCost { - Expensive = 0, // Negated expression is more expensive. + Cheaper = 0, // Negated expression is cheaper. Neutral = 1, // Negated expression has the same cost. - Cheaper = 2 // Negated expression is cheaper. + Expensive = 2 // Negated expression is more expensive. }; class ArgListEntry { diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -5671,10 +5671,10 @@ ForCodeSize, Depth + 1); NegatibleCost V1 = getNegatibleCost(Op.getOperand(1), DAG, LegalOperations, ForCodeSize, Depth + 1); - NegatibleCost V01 = std::max(V0, V1); + NegatibleCost V01 = std::min(V0, V1); if (V01 == NegatibleCost::Expensive) return NegatibleCost::Expensive; - return std::max(V01, V2); + return std::min(V01, V2); } case ISD::FP_EXTEND: @@ -5776,7 +5776,7 @@ SDValue NegZ = getNegatedExpression(Z, DAG, LegalOps, OptForSize, Depth); NegatibleCost CostX = getNegatibleCost(X, DAG, LegalOps, OptForSize, Depth); NegatibleCost CostY = getNegatibleCost(Y, DAG, LegalOps, OptForSize, Depth); - if (CostX > CostY) { + if (CostX <= CostY) { // fold (fneg (fma X, Y, Z)) -> (fma (fneg X), Y, (fneg Z)) SDValue NegX = getNegatedExpression(X, DAG, LegalOps, OptForSize, Depth); return DAG.getNode(Opcode, DL, VT, NegX, Y, NegZ, Flags);