[PATCH] D157124: [CodeGen][AArch64] Don't split jump table basic blocks
Snehasish Kumar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 24 09:05:47 PDT 2023
snehasish added inline comments.
================
Comment at: llvm/lib/Target/AArch64/AArch64InstrInfo.cpp:8421
+
+ return !containsJumpTableLookup(MBB) && !isJumpTableTarget(MBB);
+}
----------------
IMO structuring the code with functors makes it hard to follow. Additionally, there are several cases where we could return false early instead which would lower the compile time in practice.
I would prefer the code to be structured as follows:
```
bool AArch64InstrInfo::isMBBSafeToSplitToCold(
const MachineBasicBlock &MBB) const {
// Check if MBB is JumpTableTarget
const MachineJumpTableInfo *MJTI = MBB.getParent()->getJumpTableInfo();
bool isJumpTableTarget = MJTI != nullptr &&
llvm::any_of(MJTI->getJumpTables(),
[](const MachineJumpTableEntry &JTE){ return llvm::find(JTE.MBBs, &MBB) != JTE.MBBs.end()});
if (isJumpTableTarget) return false;
// Check if contains lookup
for(const auto &MI : MBB) {
switch (MI.getOpcode()) {
case TargetOpcode::G_BRJT:
case AArch64::JumpTableDest32:
case AArch64::JumpTableDest16:
case AArch64::JumpTableDest8:
return false;
default:
continue;
}
}
// All checks passed.
return true;
}
```
What do you think?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157124/new/
https://reviews.llvm.org/D157124
More information about the llvm-commits
mailing list