[PATCH] D42788: [SDAG] Legalize all CondCodes by inverting them and/or swapping operands

Krzysztof Parzyszek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 1 04:42:13 PST 2018


kparzysz created this revision.
kparzysz added reviewers: dsanders, bogner.

When expanding a CondCode, try all combinations of inverting the condition code and swapping the operands.


Repository:
  rL LLVM

https://reviews.llvm.org/D42788

Files:
  lib/CodeGen/SelectionDAG/LegalizeDAG.cpp


Index: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -1676,20 +1676,24 @@
     case ISD::SETGT:
     case ISD::SETGE:
     case ISD::SETLT:
-      // We only support using the inverted operation, which is computed above
-      // and not a different manner of supporting expanding these cases.
-      llvm_unreachable("Don't know how to expand this condition!");
     case ISD::SETNE:
     case ISD::SETEQ:
-      // Try inverting the result of the inverse condition.
-      InvCC = CCCode == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ;
+      // Swapping operands was already attempted and it didn't work.
+      // Try inverting the condition.
+      InvCC = getSetCCInverse(CCCode, OpVT.isInteger());
+      if (!TLI.isCondCodeLegal(InvCC, OpVT)) {
+        // If inverting the condition is not enough, try swapping operands
+        // on top of it.
+        InvCC = ISD::getSetCCSwappedOperands(InvCC);
+        std::swap(LHS, RHS);
+      }
       if (TLI.isCondCodeLegal(InvCC, OpVT)) {
         CC = DAG.getCondCode(InvCC);
         NeedInvert = true;
         return true;
       }
-      // If inverting the condition didn't work then we have no means to expand
-      // the condition.
+      // If all combinations of inverting the condition and swapping operands
+      // didn't work then we have no means to expand the condition.
       llvm_unreachable("Don't know how to expand this condition!");
     }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42788.132361.patch
Type: text/x-patch
Size: 1573 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180201/2f62a720/attachment.bin>


More information about the llvm-commits mailing list