[llvm] 8ea31db - [CodeGenPrepare] Use MapVector to stabilize iteration order
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 18 17:19:55 PDT 2024
Author: Fangrui Song
Date: 2024-06-18T17:19:51-07:00
New Revision: 8ea31db27211ed0c8207b4b4b0839e5cbe780c73
URL: https://github.com/llvm/llvm-project/commit/8ea31db27211ed0c8207b4b4b0839e5cbe780c73
DIFF: https://github.com/llvm/llvm-project/commit/8ea31db27211ed0c8207b4b4b0839e5cbe780c73.diff
LOG: [CodeGenPrepare] Use MapVector to stabilize iteration order
DenseMap iteration order is not guaranteed to be deterministic.
Without the change,
llvm/test/Transforms/CodeGenPrepare/X86/statepoint-relocate.ll would
fail when `combineHashValue` changes (#95970).
Fixes: dba7329ebb0dbe1fabb3faaedfd31da3b8bd611d
Added:
Modified:
llvm/lib/CodeGen/CodeGenPrepare.cpp
llvm/test/Transforms/CodeGenPrepare/X86/statepoint-relocate.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index aee9935d7a9c2..f8fdba2e35dd7 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -1194,12 +1194,12 @@ void CodeGenPrepare::eliminateMostlyEmptyBlock(BasicBlock *BB) {
// derived pointer relocation instructions given a vector of all relocate calls
static void computeBaseDerivedRelocateMap(
const SmallVectorImpl<GCRelocateInst *> &AllRelocateCalls,
- DenseMap<GCRelocateInst *, SmallVector<GCRelocateInst *, 2>>
+ MapVector<GCRelocateInst *, SmallVector<GCRelocateInst *, 0>>
&RelocateInstMap) {
// Collect information in two maps: one primarily for locating the base object
// while filling the second map; the second map is the final structure holding
// a mapping between Base and corresponding Derived relocate calls
- DenseMap<std::pair<unsigned, unsigned>, GCRelocateInst *> RelocateIdxMap;
+ MapVector<std::pair<unsigned, unsigned>, GCRelocateInst *> RelocateIdxMap;
for (auto *ThisRelocate : AllRelocateCalls) {
auto K = std::make_pair(ThisRelocate->getBasePtrIndex(),
ThisRelocate->getDerivedPtrIndex());
@@ -1375,7 +1375,7 @@ bool CodeGenPrepare::simplifyOffsetableRelocate(GCStatepointInst &I) {
// RelocateInstMap is a mapping from the base relocate instruction to the
// corresponding derived relocate instructions
- DenseMap<GCRelocateInst *, SmallVector<GCRelocateInst *, 2>> RelocateInstMap;
+ MapVector<GCRelocateInst *, SmallVector<GCRelocateInst *, 0>> RelocateInstMap;
computeBaseDerivedRelocateMap(AllRelocateCalls, RelocateInstMap);
if (RelocateInstMap.empty())
return false;
diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/statepoint-relocate.ll b/llvm/test/Transforms/CodeGenPrepare/X86/statepoint-relocate.ll
index babaa08a959b3..fbcb40e72577e 100644
--- a/llvm/test/Transforms/CodeGenPrepare/X86/statepoint-relocate.ll
+++ b/llvm/test/Transforms/CodeGenPrepare/X86/statepoint-relocate.ll
@@ -18,10 +18,11 @@ entry:
}
define i32 @test_sor_two_derived(ptr addrspace(1) %base) gc "statepoint-example" {
+; CHECK-LABEL: @test_sor_two_derived(
; CHECK: getelementptr i32, ptr addrspace(1) %base, i32 15
; CHECK: getelementptr i32, ptr addrspace(1) %base, i32 12
-; CHECK: getelementptr i32, ptr addrspace(1) %base-new, i32 12
; CHECK: getelementptr i32, ptr addrspace(1) %base-new, i32 15
+; CHECK: getelementptr i32, ptr addrspace(1) %base-new, i32 12
entry:
%ptr = getelementptr i32, ptr addrspace(1) %base, i32 15
%ptr2 = getelementptr i32, ptr addrspace(1) %base, i32 12
@@ -34,6 +35,7 @@ entry:
}
define i32 @test_sor_ooo(ptr addrspace(1) %base) gc "statepoint-example" {
+; CHECK-LABEL: @test_sor_ooo(
; CHECK: getelementptr i32, ptr addrspace(1) %base, i32 15
; CHECK: getelementptr i32, ptr addrspace(1) %base-new, i32 15
entry:
More information about the llvm-commits
mailing list