Skip to content

Commit 2d902d0

Browse files
committed
[BOLT] Implement '--assume-abi' option for AArch64
This patch implements the `getCalleeSavedRegs` function for AArch64, addressing the issue where the "not implemented" error occurs when both the `--assume-abi` option and options related to the RegAnalysis Pass (e.g., `--indirect-call-promotion=all`) are enabled.
1 parent 21f8bc2 commit 2d902d0

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,22 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
471471
return true;
472472
}
473473

474+
void getCalleeSavedRegs(BitVector &Regs) const override {
475+
Regs |= getAliases(AArch64::X18);
476+
Regs |= getAliases(AArch64::X19);
477+
Regs |= getAliases(AArch64::X20);
478+
Regs |= getAliases(AArch64::X21);
479+
Regs |= getAliases(AArch64::X22);
480+
Regs |= getAliases(AArch64::X23);
481+
Regs |= getAliases(AArch64::X24);
482+
Regs |= getAliases(AArch64::X25);
483+
Regs |= getAliases(AArch64::X26);
484+
Regs |= getAliases(AArch64::X27);
485+
Regs |= getAliases(AArch64::X28);
486+
Regs |= getAliases(AArch64::LR);
487+
Regs |= getAliases(AArch64::FP);
488+
}
489+
474490
const MCExpr *getTargetExprFor(MCInst &Inst, const MCExpr *Expr,
475491
MCContext &Ctx,
476492
uint64_t RelType) const override {

bolt/test/assume-abi.test

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Validate the usage of the `--assume-abi` option in conjunction with
2+
# options related to the RegAnalysis Pass.
3+
4+
REQUIRES: system-linux
5+
6+
RUN: %clang %cflags %p/Inputs/hello.c -o %t -Wl,-q
7+
RUN: llvm-bolt %t -o %t.bolt --assume-abi --indirect-call-promotion=all

0 commit comments

Comments
 (0)