@@ -11844,25 +11844,38 @@ SDValue SelectionDAG::getTargetInsertSubreg(int SRIdx, const SDLoc &DL, EVT VT,
1184411844/// getNodeIfExists - Get the specified node if it's already available, or
1184511845/// else return NULL.
1184611846SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
11847-                                       ArrayRef<SDValue> Ops) {
11847+                                       ArrayRef<SDValue> Ops,
11848+                                       bool AllowCommute) {
1184811849  SDNodeFlags Flags;
1184911850  if (Inserter)
1185011851    Flags = Inserter->getFlags();
11851-   return getNodeIfExists(Opcode, VTList, Ops, Flags);
11852+   return getNodeIfExists(Opcode, VTList, Ops, Flags, AllowCommute );
1185211853}
1185311854
1185411855SDNode *SelectionDAG::getNodeIfExists(unsigned Opcode, SDVTList VTList,
1185511856                                      ArrayRef<SDValue> Ops,
11856-                                       const SDNodeFlags Flags) {
11857-   if (VTList.VTs[VTList.NumVTs - 1] != MVT::Glue) {
11857+                                       const SDNodeFlags Flags,
11858+                                       bool AllowCommute) {
11859+   if (VTList.VTs[VTList.NumVTs - 1] == MVT::Glue)
11860+     return nullptr;
11861+ 
11862+   auto Lookup = [&](ArrayRef<SDValue> LookupOps) -> SDNode * {
1185811863    FoldingSetNodeID ID;
11859-     AddNodeIDNode(ID, Opcode, VTList, Ops );
11864+     AddNodeIDNode(ID, Opcode, VTList, LookupOps );
1186011865    void *IP = nullptr;
11861-     if (SDNode *E = FindNodeOrInsertPos(ID, SDLoc(),  IP)) {
11866+     if (SDNode *E = FindNodeOrInsertPos(ID, IP)) {
1186211867      E->intersectFlagsWith(Flags);
1186311868      return E;
1186411869    }
11865-   }
11870+     return nullptr;
11871+   };
11872+ 
11873+   if (SDNode *Existing = Lookup(Ops))
11874+     return Existing;
11875+ 
11876+   if (AllowCommute && TLI->isCommutativeBinOp(Opcode))
11877+     return Lookup({Ops[1], Ops[0]});
11878+ 
1186611879  return nullptr;
1186711880}
1186811881
0 commit comments