From: Ana Pazos Date: Tue, 29 Aug 2017 17:13:24 +0000 (+0000) Subject: [PGO] Fixed non-determinism with DenseSet storing function importing info. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42defb6c889214e9225a93b430c3118718fc82c7;p=llvm [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312012 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/MDBuilder.cpp b/lib/IR/MDBuilder.cpp index b9c4f482adf..84bad318591 100644 --- a/lib/IR/MDBuilder.cpp +++ b/lib/IR/MDBuilder.cpp @@ -62,9 +62,14 @@ MDNode *MDBuilder::createFunctionEntryCount( SmallVector 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 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); }