[llvm] r312012 - [PGO] Fixed non-determinism with DenseSet storing function importing info.

Ana Pazos via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 29 10:13:25 PDT 2017


Author: apazos
Date: Tue Aug 29 10:13:24 2017
New Revision: 312012

URL: http://llvm.org/viewvc/llvm-project?rev=312012&view=rev
Log:
[PGO] Fixed non-determinism with DenseSet storing function importing info.

Summary:
r296498 introduced a DenseSet to store function importing info.

Using this container causes a test failure in
test/Transform/SampleProfile/import.ll when in Reverse Iteration mode.

This patch orders IDs before iterating through this container.

Reviewers: danielcdh, mgrang

Reviewed By: danielcdh

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D37246

Modified:
    llvm/trunk/lib/IR/MDBuilder.cpp

Modified: llvm/trunk/lib/IR/MDBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/MDBuilder.cpp?rev=312012&r1=312011&r2=312012&view=diff
==============================================================================
--- llvm/trunk/lib/IR/MDBuilder.cpp (original)
+++ llvm/trunk/lib/IR/MDBuilder.cpp Tue Aug 29 10:13:24 2017
@@ -62,9 +62,14 @@ MDNode *MDBuilder::createFunctionEntryCo
   SmallVector<Metadata *, 8> Ops;
   Ops.push_back(createString("function_entry_count"));
   Ops.push_back(createConstant(ConstantInt::get(Int64Ty, Count)));
-  if (Imports)
-    for (auto ID : *Imports)
+  if (Imports) {
+    SmallVector<GlobalValue::GUID, 2> OrderID(Imports->begin(), Imports->end());
+    std::stable_sort(OrderID.begin(), OrderID.end(),
+      [] (GlobalValue::GUID A, GlobalValue::GUID B) {
+        return A < B;});
+    for (auto ID : OrderID)
       Ops.push_back(createConstant(ConstantInt::get(Int64Ty, ID)));
+  }
   return MDNode::get(Context, Ops);
 }
 




More information about the llvm-commits mailing list