[CodeGen] Use MapVector instead of DenseMap.
authorMichael Kruse <llvm@meinersbur.de>
Fri, 5 Aug 2016 16:45:51 +0000 (16:45 +0000)
committerMichael Kruse <llvm@meinersbur.de>
Fri, 5 Aug 2016 16:45:51 +0000 (16:45 +0000)
The map is iterated over when generating the values escaping the SCoP. The
indeterministic iteration order of DenseMap causes the output IR to change at
every compilation, adding noise to comparisons.

Replace DenseMap by a MapVector to ensure the same iteration order at every
compilation.

llvm-svn: 277832

polly/include/polly/CodeGen/BlockGenerators.h
polly/lib/CodeGen/BlockGenerators.cpp

index 92b62ea..20c4d9b 100644 (file)
@@ -18,7 +18,7 @@
 
 #include "polly/CodeGen/IRBuilder.h"
 #include "polly/Support/ScopHelper.h"
-#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/MapVector.h"
 #include "llvm/Analysis/ScalarEvolutionExpressions.h"
 #include "isl/map.h"
 
@@ -57,8 +57,8 @@ public:
   ///
   /// @see The EscapeMap member.
   using EscapeUsersAllocaMapTy =
-      DenseMap<Instruction *,
-               std::pair<AssertingVH<Value>, EscapeUserVectorTy>>;
+      MapVector<Instruction *,
+                std::pair<AssertingVH<Value>, EscapeUserVectorTy>>;
 
   ///@}
 
index 7c398eb..1959cc2 100644 (file)
@@ -547,8 +547,8 @@ void BlockGenerator::createScalarFinalization(Scop &S) {
   for (const auto &EscapeMapping : EscapeMap) {
     // Extract the escaping instruction and the escaping users as well as the
     // alloca the instruction was demoted to.
-    Instruction *EscapeInst = EscapeMapping.getFirst();
-    const auto &EscapeMappingValue = EscapeMapping.getSecond();
+    Instruction *EscapeInst = EscapeMapping.first;
+    const auto &EscapeMappingValue = EscapeMapping.second;
     const EscapeUserVectorTy &EscapeUsers = EscapeMappingValue.second;
     Value *ScalarAddr = EscapeMappingValue.first;