[PATCH] D124942: [BOLT][TEST] Fix MCPlusBuilder::getAliases caching behavior
Amir Ayupov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 4 11:11:22 PDT 2022
Amir updated this revision to Diff 427072.
Amir added a comment.
Move AliasMap and SmallerAliasMap into MCPlusBuilder object;
split initAliases from getAliases.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124942/new/
https://reviews.llvm.org/D124942
Files:
bolt/include/bolt/Core/MCPlusBuilder.h
bolt/lib/Core/MCPlusBuilder.cpp
bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
bolt/lib/Target/X86/X86MCPlusBuilder.cpp
Index: bolt/lib/Target/X86/X86MCPlusBuilder.cpp
===================================================================
--- bolt/lib/Target/X86/X86MCPlusBuilder.cpp
+++ bolt/lib/Target/X86/X86MCPlusBuilder.cpp
@@ -3719,7 +3719,9 @@
MCPlusBuilder *createX86MCPlusBuilder(const MCInstrAnalysis *Analysis,
const MCInstrInfo *Info,
const MCRegisterInfo *RegInfo) {
- return new X86MCPlusBuilder(Analysis, Info, RegInfo);
+ MCPlusBuilder *MIB = new X86MCPlusBuilder(Analysis, Info, RegInfo);
+ MIB->initAliases();
+ return MIB;
}
} // namespace bolt
Index: bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
===================================================================
--- bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
+++ bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp
@@ -1149,7 +1149,9 @@
MCPlusBuilder *createAArch64MCPlusBuilder(const MCInstrAnalysis *Analysis,
const MCInstrInfo *Info,
const MCRegisterInfo *RegInfo) {
- return new AArch64MCPlusBuilder(Analysis, Info, RegInfo);
+ MCPlusBuilder *MIB = new AArch64MCPlusBuilder(Analysis, Info, RegInfo);
+ MIB->initAliases();
+ return MIB;
}
} // namespace bolt
Index: bolt/lib/Core/MCPlusBuilder.cpp
===================================================================
--- bolt/lib/Core/MCPlusBuilder.cpp
+++ bolt/lib/Core/MCPlusBuilder.cpp
@@ -441,17 +441,13 @@
const BitVector &MCPlusBuilder::getAliases(MCPhysReg Reg,
bool OnlySmaller) const {
- // AliasMap caches a mapping of registers to the set of registers that
- // alias (are sub or superregs of itself, including itself).
- static std::vector<BitVector> AliasMap;
- static std::vector<BitVector> SmallerAliasMap;
-
- if (AliasMap.size() > 0) {
- if (OnlySmaller)
- return SmallerAliasMap[Reg];
- return AliasMap[Reg];
- }
+ if (OnlySmaller)
+ return SmallerAliasMap[Reg];
+ return AliasMap[Reg];
+}
+void MCPlusBuilder::initAliases() {
+ assert(AliasMap.size() == 0 && SmallerAliasMap.size() == 0);
// Build alias map
for (MCPhysReg I = 0, E = RegInfo->getNumRegs(); I != E; ++I) {
BitVector BV(RegInfo->getNumRegs(), false);
@@ -492,10 +488,6 @@
dbgs() << "\n";
}
});
-
- if (OnlySmaller)
- return SmallerAliasMap[Reg];
- return AliasMap[Reg];
}
uint8_t MCPlusBuilder::getRegSize(MCPhysReg Reg) const {
Index: bolt/include/bolt/Core/MCPlusBuilder.h
===================================================================
--- bolt/include/bolt/Core/MCPlusBuilder.h
+++ bolt/include/bolt/Core/MCPlusBuilder.h
@@ -1135,6 +1135,9 @@
virtual const BitVector &getAliases(MCPhysReg Reg,
bool OnlySmaller = false) const;
+ /// Initialize aliases tables.
+ virtual void initAliases();
+
/// Change \p Regs setting all registers used to pass parameters according
/// to the host abi. Do nothing if not implemented.
virtual BitVector getRegsUsedAsParams() const {
@@ -1904,6 +1907,11 @@
llvm_unreachable("not implemented");
return BlocksVectorTy();
}
+
+ // AliasMap caches a mapping of registers to the set of registers that
+ // alias (are sub or superregs of itself, including itself).
+ std::vector<BitVector> AliasMap;
+ std::vector<BitVector> SmallerAliasMap;
};
MCPlusBuilder *createX86MCPlusBuilder(const MCInstrAnalysis *,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124942.427072.patch
Type: text/x-patch
Size: 3500 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220504/1716767e/attachment.bin>
More information about the llvm-commits
mailing list