[llvm] 90a26a4 - [llvm-tapi-diff] Apply stable sorting to output

Cyndy Ishida via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 9 13:10:21 PDT 2021


Author: Sam Powell
Date: 2021-06-09T13:09:47-07:00
New Revision: 90a26a41e9ce16a4d471d25c2f7b36b5538fb4ce

URL: https://github.com/llvm/llvm-project/commit/90a26a41e9ce16a4d471d25c2f7b36b5538fb4ce
DIFF: https://github.com/llvm/llvm-project/commit/90a26a41e9ce16a4d471d25c2f7b36b5538fb4ce.diff

LOG: [llvm-tapi-diff] Apply stable sorting to output

* For the output, the attributes within the target slice should be
  grouped by the input order, then sorted by value ordering.
This is to fix current ubuntu buildbot inconsistences.

Added: 
    

Modified: 
    llvm/tools/llvm-tapi-diff/DiffEngine.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/tools/llvm-tapi-
diff /DiffEngine.cpp b/llvm/tools/llvm-tapi-
diff /DiffEngine.cpp
index bc9ee626d8fc..837ddb42bb25 100644
--- a/llvm/tools/llvm-tapi-
diff /DiffEngine.cpp
+++ b/llvm/tools/llvm-tapi-
diff /DiffEngine.cpp
@@ -439,6 +439,15 @@ T *castValues(const std::unique_ptr<AttributeDiff> &RawAttr) {
   return CastAttr;
 }
 
+template <typename T> void sortTargetValues(std::vector<T> &TargValues) {
+  llvm::sort(TargValues, [](const auto &ValA, const auto &ValB) {
+    return ValA.getOrder() < ValB.getOrder();
+  });
+  llvm::sort(TargValues, [](const auto &ValA, const auto &ValB) {
+    return ValA.getOrder() == ValB.getOrder() && ValA.getVal() < ValB.getVal();
+  });
+}
+
 template <typename T>
 void printVecVal(std::string Indent, const DiffOutput &Attr, raw_ostream &OS) {
   if (Attr.Values.empty())
@@ -455,10 +464,8 @@ void printVecVal(std::string Indent, const DiffOutput &Attr, raw_ostream &OS) {
   });
 
   for (auto *Vec : SortedAttrs) {
-    llvm::sort(Vec->TargValues, [](const auto &ValA, const auto &ValB) {
-      return ValA.getOrder() == ValB.getOrder() &&
-             ValA.getVal() < ValB.getVal();
-    });
+    sortTargetValues<DiffScalarVal<StringRef, AD_Diff_Scalar_Str>>(
+        Vec->TargValues);
     OS << Indent << "\t" << getTargetTripleName(Vec->Targ) << "\n";
     for (auto &Item : Vec->TargValues)
       Item.print(OS, Indent);
@@ -482,10 +489,7 @@ void printVecVal<DiffSymVec>(std::string Indent, const DiffOutput &Attr,
     return ValA->Targ < ValB->Targ;
   });
   for (auto *SymVec : SortedAttrs) {
-    llvm::sort(SymVec->TargValues, [](const auto &ValA, const auto &ValB) {
-      return ValA.getOrder() == ValB.getOrder() &&
-             ValA.getVal() < ValB.getVal();
-    });
+    sortTargetValues<SymScalar>(SymVec->TargValues);
     OS << Indent << "\t" << getTargetTripleName(SymVec->Targ) << "\n";
     for (auto &Item : SymVec->TargValues)
       Item.print(OS, Indent, SymVec->Targ);


        


More information about the llvm-commits mailing list