[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