[llvm] dbca8aa - [WebAssembly] Use SetVector instead of SmallPtrSet in FixBrTableDefaults (#84418)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 8 09:20:47 PST 2024
Author: Derek Schuff
Date: 2024-03-08T09:20:44-08:00
New Revision: dbca8aa1472b9140a68918b2615519dc7dad593f
URL: https://github.com/llvm/llvm-project/commit/dbca8aa1472b9140a68918b2615519dc7dad593f
DIFF: https://github.com/llvm/llvm-project/commit/dbca8aa1472b9140a68918b2615519dc7dad593f.diff
LOG: [WebAssembly] Use SetVector instead of SmallPtrSet in FixBrTableDefaults (#84418)
This pass inserts all the MBBs into a set and then iterates over them.
But when
the number of elements gets large enough, SmallPtrSet expands into a
hash table
which wouldn't have a deterministic iteration order since the elements
are
pointers. This results in nondeterministic jump table layouts.
Use SetVector instead for a deterministic iteration order.
Added:
Modified:
llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
index 495f19a7ccde55..4252fc1f55fc9f 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
@@ -159,19 +159,21 @@ bool WebAssemblyFixBrTableDefaults::runOnMachineFunction(MachineFunction &MF) {
<< MF.getName() << '\n');
bool Changed = false;
- SmallPtrSet<MachineBasicBlock *, 16> MBBSet;
+ SetVector<MachineBasicBlock *, SmallVector<MachineBasicBlock *, 16>,
+ DenseSet<MachineBasicBlock *>, 16>
+ MBBSet;
for (auto &MBB : MF)
MBBSet.insert(&MBB);
while (!MBBSet.empty()) {
MachineBasicBlock *MBB = *MBBSet.begin();
- MBBSet.erase(MBB);
+ MBBSet.remove(MBB);
for (auto &MI : *MBB) {
if (WebAssembly::isBrTable(MI.getOpcode())) {
fixBrTableIndex(MI, MBB, MF);
auto *Fixed = fixBrTableDefault(MI, MBB, MF);
if (Fixed != nullptr) {
- MBBSet.erase(Fixed);
+ MBBSet.remove(Fixed);
Changed = true;
}
break;
More information about the llvm-commits
mailing list