From 4e7e414ec943b264e5104c797b2f4a7af5151f71 Mon Sep 17 00:00:00 2001 From: Bjorn Pettersson Date: Fri, 10 Apr 2020 19:24:11 +0200 Subject: [PATCH] [Float2Int] Make iteration over Roots deterministic Summary: Use a SmallSetVector instead of a SmallPtrSet when collecting and storing Roots. The iteration order for a SmallPtrSet is not deterministic, so in the past the order of items inserted in the WorkList inside walkBackwards has been non-deterministic. This patch intends to make the order of rewrites done in Float2Int deterministic by changing the container for the Roots set. The semantics result of the transformation should not be any different afaict. But at least naming of IR variables (when outputting the result as an ll file) should be more stable now. Reviewers: craig.topper, spatel, cameron.mcinally Reviewed By: spatel Subscribers: mgrang, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D74534 --- llvm/include/llvm/Transforms/Scalar/Float2Int.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/Transforms/Scalar/Float2Int.h b/llvm/include/llvm/Transforms/Scalar/Float2Int.h index d7f36456..5fb47af 100644 --- a/llvm/include/llvm/Transforms/Scalar/Float2Int.h +++ b/llvm/include/llvm/Transforms/Scalar/Float2Int.h @@ -16,6 +16,7 @@ #include "llvm/ADT/EquivalenceClasses.h" #include "llvm/ADT/MapVector.h" +#include "llvm/ADT/SetVector.h" #include "llvm/IR/ConstantRange.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/Function.h" @@ -42,7 +43,7 @@ private: void cleanup(); MapVector SeenInsts; - SmallPtrSet Roots; + SmallSetVector Roots; EquivalenceClasses ECs; MapVector ConvertedInsts; LLVMContext *Ctx; -- 2.7.4