[llvm] 58d7a6e - [GlobalMerge] Use MapVector to stabilize iteration order
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 19 10:19:39 PDT 2024
Author: Fangrui Song
Date: 2024-06-19T10:19:35-07:00
New Revision: 58d7a6e0e6361871442df956bb88798ce602b09d
URL: https://github.com/llvm/llvm-project/commit/58d7a6e0e6361871442df956bb88798ce602b09d
DIFF: https://github.com/llvm/llvm-project/commit/58d7a6e0e6361871442df956bb88798ce602b09d.diff
LOG: [GlobalMerge] Use MapVector to stabilize iteration order
DenseMap iteration order is not guaranteed to be deterministic.
Without the change,
llvm/test/Transforms/GlobalMerge/basic.ll could fail when
`combineHashValue` changes (#95970).
Added:
Modified:
llvm/lib/CodeGen/GlobalMerge.cpp
llvm/test/Transforms/GlobalMerge/basic.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalMerge.cpp b/llvm/lib/CodeGen/GlobalMerge.cpp
index c39555a9c18ae..65bf7161441ba 100644
--- a/llvm/lib/CodeGen/GlobalMerge.cpp
+++ b/llvm/lib/CodeGen/GlobalMerge.cpp
@@ -63,6 +63,7 @@
#include "llvm/CodeGen/GlobalMerge.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
@@ -641,7 +642,7 @@ bool GlobalMergeImpl::run(Module &M) {
IsMachO = Triple(M.getTargetTriple()).isOSBinFormatMachO();
auto &DL = M.getDataLayout();
- DenseMap<std::pair<unsigned, StringRef>, SmallVector<GlobalVariable *, 16>>
+ MapVector<std::pair<unsigned, StringRef>, SmallVector<GlobalVariable *, 0>>
Globals, ConstGlobals, BSSGlobals;
bool Changed = false;
setMustKeepGlobalVariables(M);
diff --git a/llvm/test/Transforms/GlobalMerge/basic.ll b/llvm/test/Transforms/GlobalMerge/basic.ll
index 67e2b70220a78..2df4b34ed2099 100644
--- a/llvm/test/Transforms/GlobalMerge/basic.ll
+++ b/llvm/test/Transforms/GlobalMerge/basic.ll
@@ -4,29 +4,29 @@
target datalayout = "e-p:64:64"
target triple = "x86_64-unknown-linux-gnu"
-; CHECK: @_MergedGlobals = private global <{ i32, i32 }> <{ i32 3, i32 4 }>, section "foo", align 4
-; CHECK: @_MergedGlobals.1 = private global <{ i32, i32 }> <{ i32 1, i32 2 }>, align 4
+; CHECK: @_MergedGlobals = private global <{ i32, i32 }> <{ i32 1, i32 2 }>, align 4
+; CHECK: @_MergedGlobals.1 = private global <{ i32, i32 }> <{ i32 3, i32 4 }>, section "foo", align 4
-; CHECK-DAG: @a = internal alias i32, ptr @_MergedGlobals.1
+; CHECK-DAG: @a = internal alias i32, ptr @_MergedGlobals{{$}}
@a = internal global i32 1
-; CHECK-DAG: @b = internal alias i32, getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals.1, i32 0, i32 1)
+; CHECK-DAG: @b = internal alias i32, getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1)
@b = internal global i32 2
-; CHECK-DAG: @c = internal alias i32, ptr @_MergedGlobals
+; CHECK-DAG: @c = internal alias i32, ptr @_MergedGlobals.1{{$}}
@c = internal global i32 3, section "foo"
-; CHECK-DAG: @d = internal alias i32, getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1)
+; CHECK-DAG: @d = internal alias i32, getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals.1, i32 0, i32 1)
@d = internal global i32 4, section "foo"
define void @use() {
- ; CHECK: load i32, ptr @_MergedGlobals.1
+ ; CHECK: load i32, ptr @_MergedGlobals,
%x = load i32, ptr @a
- ; CHECK: load i32, ptr getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals.1, i32 0, i32 1)
+ ; CHECK: load i32, ptr getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1)
%y = load i32, ptr @b
- ; CHECK: load i32, ptr @_MergedGlobals
+ ; CHECK: load i32, ptr @_MergedGlobals.1
%z1 = load i32, ptr @c
- ; CHECK: load i32, ptr getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1)
+ ; CHECK: load i32, ptr getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals.1, i32 0, i32 1)
%z2 = load i32, ptr @d
ret void
}
More information about the llvm-commits
mailing list