[PATCH] D77993: [NFC][DAGCombine] Change the value of NegatibleCost to make it align with the semantics

Qing Shan Zhang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 12 21:23:13 PDT 2020


steven.zhang created this revision.
steven.zhang added reviewers: spatel, RKSimon, efriedma, arsenm, jsji.
Herald added subscribers: wuzish, hiraditya, wdng.
Herald added a project: LLVM.
steven.zhang added a child revision: D77319: [DAGCombine] Remove the getNegatibleCost to avoid the out of sync with getNegatedExpression.

This is a minor NFC change to make the code more clear. We have the NegatibleCost that has cheaper, neutral, and expensive. Typically, the smaller one means the less cost. It is inverse for current implementation, which makes following code not easy to read.
If (CostX > CostY) negate(X)

  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);
  }


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77993

Files:
  llvm/include/llvm/CodeGen/TargetLowering.h
  llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp


Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ 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);
Index: llvm/include/llvm/CodeGen/TargetLowering.h
===================================================================
--- llvm/include/llvm/CodeGen/TargetLowering.h
+++ 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 {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77993.256913.patch
Type: text/x-patch
Size: 1915 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200413/feb826a8/attachment.bin>


More information about the llvm-commits mailing list